1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; rdar://5671654 3*9880d681SAndroid Build Coastguard Worker; The loads should fold into the testl instructions, no matter how 4*9880d681SAndroid Build Coastguard Worker; the inputs are commuted. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" 7*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-darwin7" 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine i32 @test(i32* %P, i32* %G) nounwind { 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test: 11*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ret 12*9880d681SAndroid Build Coastguard Worker; CHECK: testl (%{{.*}}), %{{.*}} 13*9880d681SAndroid Build Coastguard Worker; CHECK: ret 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %P, align 4 ; <i32> [#uses=3] 17*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %G, align 4 ; <i32> [#uses=1] 18*9880d681SAndroid Build Coastguard Worker %2 = and i32 %1, %0 ; <i32> [#uses=1] 19*9880d681SAndroid Build Coastguard Worker %3 = icmp eq i32 %2, 0 ; <i1> [#uses=1] 20*9880d681SAndroid Build Coastguard Worker br i1 %3, label %bb1, label %bb 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerbb: ; preds = %entry 23*9880d681SAndroid Build Coastguard Worker %4 = tail call i32 @bar() nounwind ; <i32> [#uses=0] 24*9880d681SAndroid Build Coastguard Worker ret i32 %0 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerbb1: ; preds = %entry 27*9880d681SAndroid Build Coastguard Worker ret i32 %0 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32* %P, i32* %G) nounwind { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 32*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ret 33*9880d681SAndroid Build Coastguard Worker; CHECK: testl (%{{.*}}), %{{.*}} 34*9880d681SAndroid Build Coastguard Worker; CHECK: ret 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerentry: 37*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %P, align 4 ; <i32> [#uses=3] 38*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %G, align 4 ; <i32> [#uses=1] 39*9880d681SAndroid Build Coastguard Worker %2 = and i32 %0, %1 ; <i32> [#uses=1] 40*9880d681SAndroid Build Coastguard Worker %3 = icmp eq i32 %2, 0 ; <i1> [#uses=1] 41*9880d681SAndroid Build Coastguard Worker br i1 %3, label %bb1, label %bb 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerbb: ; preds = %entry 44*9880d681SAndroid Build Coastguard Worker %4 = tail call i32 @bar() nounwind ; <i32> [#uses=0] 45*9880d681SAndroid Build Coastguard Worker ret i32 %0 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerbb1: ; preds = %entry 48*9880d681SAndroid Build Coastguard Worker ret i32 %0 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdefine i32 @test3(i32* %P, i32* %G) nounwind { 52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 53*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ret 54*9880d681SAndroid Build Coastguard Worker; CHECK: testl (%{{.*}}), %{{.*}} 55*9880d681SAndroid Build Coastguard Worker; CHECK: ret 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerentry: 58*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %P, align 4 ; <i32> [#uses=3] 59*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %G, align 4 ; <i32> [#uses=1] 60*9880d681SAndroid Build Coastguard Worker %2 = and i32 %0, %1 ; <i32> [#uses=1] 61*9880d681SAndroid Build Coastguard Worker %3 = icmp eq i32 %2, 0 ; <i1> [#uses=1] 62*9880d681SAndroid Build Coastguard Worker br i1 %3, label %bb1, label %bb 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerbb: ; preds = %entry 65*9880d681SAndroid Build Coastguard Worker %4 = tail call i32 @bar() nounwind ; <i32> [#uses=0] 66*9880d681SAndroid Build Coastguard Worker ret i32 %1 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerbb1: ; preds = %entry 69*9880d681SAndroid Build Coastguard Worker ret i32 %1 70*9880d681SAndroid Build Coastguard Worker} 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerdeclare i32 @bar() 73