1*9880d681SAndroid Build Coastguard Worker; FIXME: FastISel currently returns false if it hits code that uses VSX 2*9880d681SAndroid Build Coastguard Worker; registers and with -fast-isel-abort=1 turned on the test case will then fail. 3*9880d681SAndroid Build Coastguard Worker; When fastisel better supports VSX fix up this test case. 4*9880d681SAndroid Build Coastguard Worker; 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=-vsx | FileCheck %s --check-prefix=ELF64 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @rettrue() nounwind { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: rettrue 10*9880d681SAndroid Build Coastguard Worker; ELF64: li 3, 1 11*9880d681SAndroid Build Coastguard Worker; ELF64: blr 12*9880d681SAndroid Build Coastguard Worker ret i1 true 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @retfalse() nounwind { 16*9880d681SAndroid Build Coastguard Workerentry: 17*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: retfalse 18*9880d681SAndroid Build Coastguard Worker; ELF64: li 3, 0 19*9880d681SAndroid Build Coastguard Worker; ELF64: blr 20*9880d681SAndroid Build Coastguard Worker ret i1 false 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine signext i1 @retstrue() nounwind { 24*9880d681SAndroid Build Coastguard Workerentry: 25*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: retstrue 26*9880d681SAndroid Build Coastguard Worker; ELF64: li 3, -1 27*9880d681SAndroid Build Coastguard Worker; ELF64: blr 28*9880d681SAndroid Build Coastguard Worker ret i1 true 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine signext i1 @retsfalse() nounwind { 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: retsfalse 34*9880d681SAndroid Build Coastguard Worker; ELF64: li 3, 0 35*9880d681SAndroid Build Coastguard Worker; ELF64: blr 36*9880d681SAndroid Build Coastguard Worker ret i1 false 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine signext i8 @ret2(i8 signext %a) nounwind { 40*9880d681SAndroid Build Coastguard Workerentry: 41*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret2 42*9880d681SAndroid Build Coastguard Worker; ELF64: extsb 43*9880d681SAndroid Build Coastguard Worker; ELF64: blr 44*9880d681SAndroid Build Coastguard Worker ret i8 %a 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @ret3(i8 signext %a) nounwind { 48*9880d681SAndroid Build Coastguard Workerentry: 49*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret3 50*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 56 51*9880d681SAndroid Build Coastguard Worker; ELF64: blr 52*9880d681SAndroid Build Coastguard Worker ret i8 %a 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine signext i16 @ret4(i16 signext %a) nounwind { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret4 58*9880d681SAndroid Build Coastguard Worker; ELF64: extsh 59*9880d681SAndroid Build Coastguard Worker; ELF64: blr 60*9880d681SAndroid Build Coastguard Worker ret i16 %a 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @ret5(i16 signext %a) nounwind { 64*9880d681SAndroid Build Coastguard Workerentry: 65*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret5 66*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48 67*9880d681SAndroid Build Coastguard Worker; ELF64: blr 68*9880d681SAndroid Build Coastguard Worker ret i16 %a 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine i16 @ret6(i16 %a) nounwind { 72*9880d681SAndroid Build Coastguard Workerentry: 73*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret6 74*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48 75*9880d681SAndroid Build Coastguard Worker; ELF64: blr 76*9880d681SAndroid Build Coastguard Worker ret i16 %a 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerdefine signext i32 @ret7(i32 signext %a) nounwind { 80*9880d681SAndroid Build Coastguard Workerentry: 81*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret7 82*9880d681SAndroid Build Coastguard Worker; ELF64: extsw 83*9880d681SAndroid Build Coastguard Worker; ELF64: blr 84*9880d681SAndroid Build Coastguard Worker ret i32 %a 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @ret8(i32 signext %a) nounwind { 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret8 90*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32 91*9880d681SAndroid Build Coastguard Worker; ELF64: blr 92*9880d681SAndroid Build Coastguard Worker ret i32 %a 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine i32 @ret9(i32 %a) nounwind { 96*9880d681SAndroid Build Coastguard Workerentry: 97*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret9 98*9880d681SAndroid Build Coastguard Worker; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32 99*9880d681SAndroid Build Coastguard Worker; ELF64: blr 100*9880d681SAndroid Build Coastguard Worker ret i32 %a 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdefine i64 @ret10(i64 %a) nounwind { 104*9880d681SAndroid Build Coastguard Workerentry: 105*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret10 106*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: exts 107*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl 108*9880d681SAndroid Build Coastguard Worker; ELF64: blr 109*9880d681SAndroid Build Coastguard Worker ret i64 %a 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine float @ret11(float %a) nounwind { 113*9880d681SAndroid Build Coastguard Workerentry: 114*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret11 115*9880d681SAndroid Build Coastguard Worker; ELF64: blr 116*9880d681SAndroid Build Coastguard Worker ret float %a 117*9880d681SAndroid Build Coastguard Worker} 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Workerdefine double @ret12(double %a) nounwind { 120*9880d681SAndroid Build Coastguard Workerentry: 121*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret12 122*9880d681SAndroid Build Coastguard Worker; ELF64: blr 123*9880d681SAndroid Build Coastguard Worker ret double %a 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdefine i8 @ret13() nounwind { 127*9880d681SAndroid Build Coastguard Workerentry: 128*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret13 129*9880d681SAndroid Build Coastguard Worker; ELF64: li 130*9880d681SAndroid Build Coastguard Worker; ELF64: blr 131*9880d681SAndroid Build Coastguard Worker ret i8 15; 132*9880d681SAndroid Build Coastguard Worker} 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Workerdefine i16 @ret14() nounwind { 135*9880d681SAndroid Build Coastguard Workerentry: 136*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret14 137*9880d681SAndroid Build Coastguard Worker; ELF64: li 138*9880d681SAndroid Build Coastguard Worker; ELF64: blr 139*9880d681SAndroid Build Coastguard Worker ret i16 -225; 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Workerdefine i32 @ret15() nounwind { 143*9880d681SAndroid Build Coastguard Workerentry: 144*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret15 145*9880d681SAndroid Build Coastguard Worker; ELF64: lis 146*9880d681SAndroid Build Coastguard Worker; ELF64: ori 147*9880d681SAndroid Build Coastguard Worker; ELF64: blr 148*9880d681SAndroid Build Coastguard Worker ret i32 278135; 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerdefine i64 @ret16() nounwind { 152*9880d681SAndroid Build Coastguard Workerentry: 153*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret16 154*9880d681SAndroid Build Coastguard Worker; ELF64: li 155*9880d681SAndroid Build Coastguard Worker; ELF64: sldi 156*9880d681SAndroid Build Coastguard Worker; ELF64: oris 157*9880d681SAndroid Build Coastguard Worker; ELF64: ori 158*9880d681SAndroid Build Coastguard Worker; ELF64: blr 159*9880d681SAndroid Build Coastguard Worker ret i64 27813515225; 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Workerdefine float @ret17() nounwind { 163*9880d681SAndroid Build Coastguard Workerentry: 164*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret17 165*9880d681SAndroid Build Coastguard Worker; ELF64: addis 166*9880d681SAndroid Build Coastguard Worker; ELF64: lfs 167*9880d681SAndroid Build Coastguard Worker; ELF64: blr 168*9880d681SAndroid Build Coastguard Worker ret float 2.5; 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Workerdefine double @ret18() nounwind { 172*9880d681SAndroid Build Coastguard Workerentry: 173*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret18 174*9880d681SAndroid Build Coastguard Worker; ELF64: addis 175*9880d681SAndroid Build Coastguard Worker; ELF64: lfd 176*9880d681SAndroid Build Coastguard Worker; ELF64: blr 177*9880d681SAndroid Build Coastguard Worker ret double 2.5e-33; 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @ret19() nounwind { 181*9880d681SAndroid Build Coastguard Workerentry: 182*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret19 183*9880d681SAndroid Build Coastguard Worker; ELF64: li 184*9880d681SAndroid Build Coastguard Worker; ELF64: oris 185*9880d681SAndroid Build Coastguard Worker; ELF64: ori 186*9880d681SAndroid Build Coastguard Worker; ELF64: blr 187*9880d681SAndroid Build Coastguard Worker ret i32 -1 188*9880d681SAndroid Build Coastguard Worker} 189*9880d681SAndroid Build Coastguard Worker 190*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @ret20() nounwind { 191*9880d681SAndroid Build Coastguard Workerentry: 192*9880d681SAndroid Build Coastguard Worker; ELF64-LABEL: ret20 193*9880d681SAndroid Build Coastguard Worker; ELF64: lis{{.*}}0 194*9880d681SAndroid Build Coastguard Worker; ELF64: ori{{.*}}32768 195*9880d681SAndroid Build Coastguard Worker; ELF64: blr 196*9880d681SAndroid Build Coastguard Worker ret i16 32768 197*9880d681SAndroid Build Coastguard Worker} 198