CodeGen peephole: fold redundant phys reg copies
[oota-llvm.git] / test / CodeGen / X86 / loop-strength-reduce8.ll
index 1d042769b0ba2330ccfd346811704c4261d4f44c..716e1478c9ab539ceda9b167326d5da214e51fe6 100644 (file)
@@ -1,6 +1,9 @@
 ; RUN: llc < %s -mtriple=i386-apple-darwin | FileCheck %s
 
-; CHECK: leal 16(%eax), %edx
+; FIXME: The first two instructions, movl and addl, should have been combined to
+; "leal 16(%eax), %edx" by the backend (PR20776).
+; CHECK: movl    %eax, %edx
+; CHECK: addl    $16, %edx
 ; CHECK: align
 ; CHECK: addl    $4, %edx
 ; CHECK: decl    %ecx
@@ -50,23 +53,23 @@ entry:
        %p1 = bitcast i8** %p to i8*            ; <i8*> [#uses=2]
        call void @llvm.va_start(i8* %p1)
        %0 = call fastcc %struct.tree_node* @make_node(i32 %code) nounwind              ; <%struct.tree_node*> [#uses=2]
-       %1 = getelementptr [256 x i32]* @tree_code_length, i32 0, i32 %code             ; <i32*> [#uses=1]
-       %2 = load i32* %1, align 4              ; <i32> [#uses=2]
-       %3 = load i32* @lineno, align 4         ; <i32> [#uses=1]
+       %1 = getelementptr [256 x i32], [256 x i32]* @tree_code_length, i32 0, i32 %code                ; <i32*> [#uses=1]
+       %2 = load i32, i32* %1, align 4         ; <i32> [#uses=2]
+       %3 = load i32, i32* @lineno, align 4            ; <i32> [#uses=1]
        %4 = bitcast %struct.tree_node* %0 to %struct.tree_exp*         ; <%struct.tree_exp*> [#uses=2]
-       %5 = getelementptr %struct.tree_exp* %4, i32 0, i32 1           ; <i32*> [#uses=1]
+       %5 = getelementptr %struct.tree_exp, %struct.tree_exp* %4, i32 0, i32 1         ; <i32*> [#uses=1]
        store i32 %3, i32* %5, align 4
        %6 = icmp sgt i32 %2, 0         ; <i1> [#uses=1]
        br i1 %6, label %bb, label %bb3
 
 bb:            ; preds = %bb, %entry
        %i.01 = phi i32 [ %indvar.next, %bb ], [ 0, %entry ]            ; <i32> [#uses=2]
-       %7 = load i8** %p, align 4              ; <i8*> [#uses=2]
-       %8 = getelementptr i8* %7, i32 4                ; <i8*> [#uses=1]
+       %7 = load i8*, i8** %p, align 4         ; <i8*> [#uses=2]
+       %8 = getelementptr i8, i8* %7, i32 4            ; <i8*> [#uses=1]
        store i8* %8, i8** %p, align 4
        %9 = bitcast i8* %7 to %struct.tree_node**              ; <%struct.tree_node**> [#uses=1]
-       %10 = load %struct.tree_node** %9, align 4              ; <%struct.tree_node*> [#uses=1]
-       %11 = getelementptr %struct.tree_exp* %4, i32 0, i32 2, i32 %i.01               ; <%struct.tree_node**> [#uses=1]
+       %10 = load %struct.tree_node*, %struct.tree_node** %9, align 4          ; <%struct.tree_node*> [#uses=1]
+       %11 = getelementptr %struct.tree_exp, %struct.tree_exp* %4, i32 0, i32 2, i32 %i.01             ; <%struct.tree_node**> [#uses=1]
        store %struct.tree_node* %10, %struct.tree_node** %11, align 4
        %indvar.next = add i32 %i.01, 1         ; <i32> [#uses=2]
        %exitcond = icmp eq i32 %indvar.next, %2                ; <i1> [#uses=1]