1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker@a = global i8 1, align 1 4*9880d681SAndroid Build Coastguard Worker@b = global i16 2, align 2 5*9880d681SAndroid Build Coastguard Worker@c = global i32 4, align 4 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @t1() nounwind { 8*9880d681SAndroid Build Coastguard Worker; ELF64: t1 9*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* @a, align 1 10*9880d681SAndroid Build Coastguard Worker call void @foo1(i8 zeroext %1) 11*9880d681SAndroid Build Coastguard Worker; ELF64: lbz 12*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl 13*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm 14*9880d681SAndroid Build Coastguard Worker ret void 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine void @t2() nounwind { 18*9880d681SAndroid Build Coastguard Worker; ELF64: t2 19*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* @b, align 2 20*9880d681SAndroid Build Coastguard Worker call void @foo2(i16 zeroext %1) 21*9880d681SAndroid Build Coastguard Worker; ELF64: lhz 22*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl 23*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm 24*9880d681SAndroid Build Coastguard Worker ret void 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine void @t2a() nounwind { 28*9880d681SAndroid Build Coastguard Worker; ELF64: t2a 29*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* @c, align 4 30*9880d681SAndroid Build Coastguard Worker call void @foo3(i32 zeroext %1) 31*9880d681SAndroid Build Coastguard Worker; ELF64: lwz 32*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl 33*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdeclare void @foo1(i8 zeroext) 38*9880d681SAndroid Build Coastguard Workerdeclare void @foo2(i16 zeroext) 39*9880d681SAndroid Build Coastguard Workerdeclare void @foo3(i32 zeroext) 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine i32 @t3() nounwind { 42*9880d681SAndroid Build Coastguard Worker; ELF64: t3 43*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* @a, align 1 44*9880d681SAndroid Build Coastguard Worker %2 = zext i8 %1 to i32 45*9880d681SAndroid Build Coastguard Worker; ELF64: lbz 46*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm 47*9880d681SAndroid Build Coastguard Worker ret i32 %2 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine i32 @t4() nounwind { 51*9880d681SAndroid Build Coastguard Worker; ELF64: t4 52*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* @b, align 2 53*9880d681SAndroid Build Coastguard Worker %2 = zext i16 %1 to i32 54*9880d681SAndroid Build Coastguard Worker; ELF64: lhz 55*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm 56*9880d681SAndroid Build Coastguard Worker ret i32 %2 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine i32 @t5() nounwind { 60*9880d681SAndroid Build Coastguard Worker; ELF64: t5 61*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* @b, align 2 62*9880d681SAndroid Build Coastguard Worker %2 = sext i16 %1 to i32 63*9880d681SAndroid Build Coastguard Worker; ELF64: lha 64*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm 65*9880d681SAndroid Build Coastguard Worker ret i32 %2 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine i32 @t6() nounwind { 69*9880d681SAndroid Build Coastguard Worker; ELF64: t6 70*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* @a, align 2 71*9880d681SAndroid Build Coastguard Worker %2 = sext i8 %1 to i32 72*9880d681SAndroid Build Coastguard Worker; ELF64: lbz 73*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm 74*9880d681SAndroid Build Coastguard Worker ret i32 %2 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine i64 @t7() nounwind { 78*9880d681SAndroid Build Coastguard Worker; ELF64: t7 79*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* @a, align 1 80*9880d681SAndroid Build Coastguard Worker %2 = zext i8 %1 to i64 81*9880d681SAndroid Build Coastguard Worker; ELF64: lbz 82*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl 83*9880d681SAndroid Build Coastguard Worker ret i64 %2 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerdefine i64 @t8() nounwind { 87*9880d681SAndroid Build Coastguard Worker; ELF64: t8 88*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* @b, align 2 89*9880d681SAndroid Build Coastguard Worker %2 = zext i16 %1 to i64 90*9880d681SAndroid Build Coastguard Worker; ELF64: lhz 91*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl 92*9880d681SAndroid Build Coastguard Worker ret i64 %2 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine i64 @t9() nounwind { 96*9880d681SAndroid Build Coastguard Worker; ELF64: t9 97*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* @b, align 2 98*9880d681SAndroid Build Coastguard Worker %2 = sext i16 %1 to i64 99*9880d681SAndroid Build Coastguard Worker; ELF64: lha 100*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: extsh 101*9880d681SAndroid Build Coastguard Worker ret i64 %2 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine i64 @t10() nounwind { 105*9880d681SAndroid Build Coastguard Worker; ELF64: t10 106*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* @a, align 2 107*9880d681SAndroid Build Coastguard Worker %2 = sext i8 %1 to i64 108*9880d681SAndroid Build Coastguard Worker; ELF64: lbz 109*9880d681SAndroid Build Coastguard Worker; ELF64: extsb 110*9880d681SAndroid Build Coastguard Worker ret i64 %2 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerdefine i64 @t11() nounwind { 114*9880d681SAndroid Build Coastguard Worker; ELF64: t11 115*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* @c, align 4 116*9880d681SAndroid Build Coastguard Worker %2 = zext i32 %1 to i64 117*9880d681SAndroid Build Coastguard Worker; ELF64: lwz 118*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl 119*9880d681SAndroid Build Coastguard Worker ret i64 %2 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerdefine i64 @t12() nounwind { 123*9880d681SAndroid Build Coastguard Worker; ELF64: t12 124*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* @c, align 4 125*9880d681SAndroid Build Coastguard Worker %2 = sext i32 %1 to i64 126*9880d681SAndroid Build Coastguard Worker; ELF64: lwa 127*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: extsw 128*9880d681SAndroid Build Coastguard Worker ret i64 %2 129*9880d681SAndroid Build Coastguard Worker} 130