AVX512: VPMOVAPS/PD and VPMOVUPS/PD (load) intrinsic implementation.
[oota-llvm.git] / test / CodeGen / X86 / 2009-03-13-PHIElimBug.ll
index ea4150c22c2525da442a76e66235637108f07b14..91f29c4f24cd96df0fa2093a27610fab07397484 100644 (file)
@@ -1,37 +1,36 @@
-; RUN: llvm-as < %s | llc -mtriple=i386-pc-linux-gnu -stats |& grep phielim | grep {Number of EH try blocks skipped} | grep 4
+; RUN: llc < %s -mtriple=i686-linux | FileCheck %s
+; Check the register copy comes after the call to f and before the call to g
 ; PR3784
 
-       %struct.c38002a__arr___XUB = type { i32, i32 }
-       %struct.c38002a__arr_name = type { [0 x i32]*, %struct.c38002a__arr___XUB* }
-       %struct.c38002a__rec = type { i32, %struct.c38002a__arr_name }
+declare i32 @f()
 
-define void @_ada_c38002a() {
-entry:
-       %0 = invoke i8* @__gnat_malloc(i32 12)
-                       to label %invcont unwind label %lpad            ; <i8*> [#uses=0]
-
-invcont:               ; preds = %entry
-       %1 = invoke i8* @__gnat_malloc(i32 20)
-                       to label %invcont1 unwind label %lpad           ; <i8*> [#uses=0]
-
-invcont1:              ; preds = %invcont
-       %2 = invoke i32 @report__ident_int(i32 2)
-                       to label %.noexc unwind label %lpad             ; <i32> [#uses=0]
+declare i32 @g()
 
-.noexc:                ; preds = %invcont1
-       %3 = invoke i32 @report__ident_int(i32 3)
-                       to label %.noexc88 unwind label %lpad           ; <i32> [#uses=0]
-
-.noexc88:              ; preds = %.noexc
-       unreachable
-
-lpad:          ; preds = %.noexc, %invcont1, %invcont, %entry
-       %r.0 = phi %struct.c38002a__rec* [ null, %entry ], [ null, %invcont ], [ null, %invcont1 ], [ null, %.noexc ]           ; <%struct.c38002a__rec*> [#uses=1]
-       %4 = getelementptr %struct.c38002a__rec* %r.0, i32 0, i32 0             ; <i32*> [#uses=1]
-       %5 = load i32* %4, align 4              ; <i32> [#uses=0]
-       ret void
+define i32 @phi() personality i32 (...)* @__gxx_personality_v0 {
+entry:
+       %a = call i32 @f()              ; <i32> [#uses=1]
+       %b = invoke i32 @g()
+                       to label %cont unwind label %lpad               ; <i32> [#uses=1]
+
+cont:          ; preds = %entry
+       %x = phi i32 [ %b, %entry ]             ; <i32> [#uses=0]
+       %aa = call i32 @g()             ; <i32> [#uses=1]
+       %bb = invoke i32 @g()
+                       to label %cont2 unwind label %lpad              ; <i32> [#uses=1]
+
+cont2:         ; preds = %cont
+       %xx = phi i32 [ %bb, %cont ]            ; <i32> [#uses=1]
+       ret i32 %xx
+
+lpad:          ; preds = %cont, %entry
+       %y = phi i32 [ %a, %entry ], [ %aa, %cont ]             ; <i32> [#uses=1]
+        %exn = landingpad {i8*, i32}
+                 cleanup
+       ret i32 %y
 }
 
-declare i32 @report__ident_int(i32)
+; CHECK: call{{.*}}f
+; CHECK: movl %eax, %esi
+; CHECK: call{{.*}}g
 
-declare i8* @__gnat_malloc(i32)
+declare i32 @__gxx_personality_v0(...)