1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -disable-cgp-branch-opts | FileCheck %s -check-prefix=32 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -disable-cgp-branch-opts | FileCheck %s -check-prefix=64 3*9880d681SAndroid Build Coastguard Worker; rdar://7573216 4*9880d681SAndroid Build Coastguard Worker; PR6146 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32 @t1(i32 %x) nounwind readnone ssp { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker; 32-LABEL: t1: 9*9880d681SAndroid Build Coastguard Worker; 32: cmpl $1 10*9880d681SAndroid Build Coastguard Worker; 32: sbbl 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; 64-LABEL: t1: 13*9880d681SAndroid Build Coastguard Worker; 64: cmpl $1 14*9880d681SAndroid Build Coastguard Worker; 64: sbbl 15*9880d681SAndroid Build Coastguard Worker %0 = icmp eq i32 %x, 0 16*9880d681SAndroid Build Coastguard Worker %iftmp.0.0 = select i1 %0, i32 -1, i32 0 17*9880d681SAndroid Build Coastguard Worker ret i32 %iftmp.0.0 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i32 @t2(i32 %x) nounwind readnone ssp { 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker; 32-LABEL: t2: 23*9880d681SAndroid Build Coastguard Worker; 32: cmpl $1 24*9880d681SAndroid Build Coastguard Worker; 32: sbbl 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; 64-LABEL: t2: 27*9880d681SAndroid Build Coastguard Worker; 64: cmpl $1 28*9880d681SAndroid Build Coastguard Worker; 64: sbbl 29*9880d681SAndroid Build Coastguard Worker %0 = icmp eq i32 %x, 0 30*9880d681SAndroid Build Coastguard Worker %iftmp.0.0 = sext i1 %0 to i32 31*9880d681SAndroid Build Coastguard Worker ret i32 %iftmp.0.0 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker%struct.zbookmark = type { i64, i64 } 35*9880d681SAndroid Build Coastguard Worker%struct.zstream = type { } 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine i32 @t3() nounwind readonly { 38*9880d681SAndroid Build Coastguard Workerentry: 39*9880d681SAndroid Build Coastguard Worker; 32-LABEL: t3: 40*9880d681SAndroid Build Coastguard Worker; 32: cmpl $1 41*9880d681SAndroid Build Coastguard Worker; 32: sbbl 42*9880d681SAndroid Build Coastguard Worker; 32: cmpl 43*9880d681SAndroid Build Coastguard Worker; 32: xorl 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; 64-LABEL: t3: 46*9880d681SAndroid Build Coastguard Worker; 64: cmpl $1 47*9880d681SAndroid Build Coastguard Worker; 64: sbbq 48*9880d681SAndroid Build Coastguard Worker; 64: cmpq 49*9880d681SAndroid Build Coastguard Worker; 64: xorl 50*9880d681SAndroid Build Coastguard Worker %not.tobool = icmp eq i32 undef, 0 ; <i1> [#uses=2] 51*9880d681SAndroid Build Coastguard Worker %cond = sext i1 %not.tobool to i32 ; <i32> [#uses=1] 52*9880d681SAndroid Build Coastguard Worker %conv = sext i1 %not.tobool to i64 ; <i64> [#uses=1] 53*9880d681SAndroid Build Coastguard Worker %add13 = add i64 0, %conv ; <i64> [#uses=1] 54*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i64 undef, %add13 ; <i1> [#uses=1] 55*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry 58*9880d681SAndroid Build Coastguard Worker br label %if.end 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 61*9880d681SAndroid Build Coastguard Worker %xor27 = xor i32 undef, %cond ; <i32> [#uses=0] 62*9880d681SAndroid Build Coastguard Worker ret i32 0 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine i32 @t4(i64 %x) nounwind readnone ssp { 66*9880d681SAndroid Build Coastguard Workerentry: 67*9880d681SAndroid Build Coastguard Worker; 32-LABEL: t4: 68*9880d681SAndroid Build Coastguard Worker; 32: movl 69*9880d681SAndroid Build Coastguard Worker; 32: orl 70*9880d681SAndroid Build Coastguard Worker; 32: movl 71*9880d681SAndroid Build Coastguard Worker; 32: je 72*9880d681SAndroid Build Coastguard Worker; 32: xorl 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker; 64-LABEL: t4: 75*9880d681SAndroid Build Coastguard Worker; 64: cmpq $1 76*9880d681SAndroid Build Coastguard Worker; 64: sbbl 77*9880d681SAndroid Build Coastguard Worker %0 = icmp eq i64 %x, 0 78*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 79*9880d681SAndroid Build Coastguard Worker ret i32 %1 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine i64 @t5(i32 %x) nounwind readnone ssp { 83*9880d681SAndroid Build Coastguard Workerentry: 84*9880d681SAndroid Build Coastguard Worker; 32-LABEL: t5: 85*9880d681SAndroid Build Coastguard Worker; 32: cmpl $1 86*9880d681SAndroid Build Coastguard Worker; 32: sbbl 87*9880d681SAndroid Build Coastguard Worker; 32: movl 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker; 64-LABEL: t5: 90*9880d681SAndroid Build Coastguard Worker; 64: cmpl $1 91*9880d681SAndroid Build Coastguard Worker; 64: sbbq 92*9880d681SAndroid Build Coastguard Worker %0 = icmp eq i32 %x, 0 93*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i64 94*9880d681SAndroid Build Coastguard Worker ret i64 %1 95*9880d681SAndroid Build Coastguard Worker} 96*9880d681SAndroid Build Coastguard Worker 97