1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown-linux-gnu | FileCheck %s -check-prefix=X86 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s -check-prefix=X64 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-pc-win32 | FileCheck %s -check-prefix=WIN64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Check that the argument gets zero-extended before calling. 6*9880d681SAndroid Build Coastguard Worker; X86-LABEL: bar1 7*9880d681SAndroid Build Coastguard Worker; X86: movzbl 8*9880d681SAndroid Build Coastguard Worker; X86: calll 9*9880d681SAndroid Build Coastguard Worker; X64-LABEL: bar1 10*9880d681SAndroid Build Coastguard Worker; X64: movzbl 11*9880d681SAndroid Build Coastguard Worker; X64: jmp 12*9880d681SAndroid Build Coastguard Worker; WIN64-LABEL: bar1 13*9880d681SAndroid Build Coastguard Worker; WIN64: movzbl 14*9880d681SAndroid Build Coastguard Worker; WIN64: callq 15*9880d681SAndroid Build Coastguard Workerdefine void @bar1(i1 zeroext %v1) nounwind ssp { 16*9880d681SAndroid Build Coastguard Workerentry: 17*9880d681SAndroid Build Coastguard Worker %conv = zext i1 %v1 to i32 18*9880d681SAndroid Build Coastguard Worker %call = tail call i32 (...) @foo1(i32 %conv) nounwind 19*9880d681SAndroid Build Coastguard Worker ret void 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker; Check that on x86-64 the arguments are simply forwarded. 23*9880d681SAndroid Build Coastguard Worker; X64-LABEL: bar2 24*9880d681SAndroid Build Coastguard Worker; X64-NOT: movzbl 25*9880d681SAndroid Build Coastguard Worker; X64: jmp 26*9880d681SAndroid Build Coastguard Worker; WIN64-LABEL: bar2 27*9880d681SAndroid Build Coastguard Worker; WIN64-NOT: movzbl 28*9880d681SAndroid Build Coastguard Worker; WIN64: callq 29*9880d681SAndroid Build Coastguard Workerdefine void @bar2(i8 zeroext %v1) nounwind ssp { 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %v1 to i32 32*9880d681SAndroid Build Coastguard Worker %call = tail call i32 (...) @foo1(i32 %conv) nounwind 33*9880d681SAndroid Build Coastguard Worker ret void 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; Check that i1 return values are not zero-extended. 37*9880d681SAndroid Build Coastguard Worker; X86-LABEL: bar3 38*9880d681SAndroid Build Coastguard Worker; X86: call 39*9880d681SAndroid Build Coastguard Worker; X86-NEXT: {{add|pop}} 40*9880d681SAndroid Build Coastguard Worker; X86-NEXT: ret 41*9880d681SAndroid Build Coastguard Worker; X64-LABEL: bar3 42*9880d681SAndroid Build Coastguard Worker; X64: call 43*9880d681SAndroid Build Coastguard Worker; X64-NEXT: {{add|pop}} 44*9880d681SAndroid Build Coastguard Worker; X64-NEXT: ret 45*9880d681SAndroid Build Coastguard Worker; WIN64-LABEL: bar3 46*9880d681SAndroid Build Coastguard Worker; WIN64: call 47*9880d681SAndroid Build Coastguard Worker; WIN64-NEXT: {{add|pop}} 48*9880d681SAndroid Build Coastguard Worker; WIN64-NEXT: ret 49*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @bar3() nounwind ssp { 50*9880d681SAndroid Build Coastguard Workerentry: 51*9880d681SAndroid Build Coastguard Worker %call = call i1 @foo2() nounwind 52*9880d681SAndroid Build Coastguard Worker ret i1 %call 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdeclare i32 @foo1(...) 56*9880d681SAndroid Build Coastguard Workerdeclare zeroext i1 @foo2() 57