implement rdar://6653118 - fastisel should fold loads where possible.
[oota-llvm.git] / test / CodeGen / X86 / fast-isel-mem.ll
index 35ec1e7115b24bb2ad062bc0b4ea6b43878dc1bd..8db1936bc20ea6557785cae31262074a84e7da73 100644 (file)
@@ -1,10 +1,8 @@
-; RUN: llc < %s -fast-isel -mtriple=i386-apple-darwin | \
-; RUN:   grep lazy_ptr, | count 2
-; RUN: llc < %s -fast-isel -march=x86 -relocation-model=static | \
-; RUN:   grep lea
+; RUN: llc < %s -fast-isel -mtriple=i386-apple-darwin | FileCheck %s
 
 @src = external global i32
 
+; rdar://6653118
 define i32 @loadgv() nounwind {
 entry:
        %0 = load i32* @src, align 4
@@ -12,6 +10,14 @@ entry:
         %2 = add i32 %0, %1
         store i32 %2, i32* @src
        ret i32 %2
+; This should fold one of the loads into the add.
+; CHECK: loadgv:
+; CHECK:       movl    L_src$non_lazy_ptr, %ecx
+; CHECK:       movl    (%ecx), %eax
+; CHECK:       addl    (%ecx), %eax
+; CHECK:       movl    %eax, (%ecx)
+; CHECK:       ret
+
 }
 
 %stuff = type { i32 (...)** }
@@ -21,4 +27,8 @@ define void @t(%stuff* %this) nounwind {
 entry:
        store i32 (...)** getelementptr ([4 x i32 (...)*]* @LotsStuff, i32 0, i32 2), i32 (...)*** null, align 4
        ret void
+; CHECK: _t:
+; CHECK:       movl    $0, %eax
+; CHECK:       movl    L_LotsStuff$non_lazy_ptr, %ecx
+
 }