1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unknown-unknown < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \ 3*9880d681SAndroid Build Coastguard Worker; RUN: --check-prefix=CHECK-P7 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine signext i32 @f32toi32(float %a) { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %0 = bitcast float %a to i32 8*9880d681SAndroid Build Coastguard Worker ret i32 %0 9*9880d681SAndroid Build Coastguard Worker; CHECK-P7: stfs 1, 10*9880d681SAndroid Build Coastguard Worker; CHECK-P7: lwa 3, 11*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpspn [[CONVREG:[0-9]+]], 1 12*9880d681SAndroid Build Coastguard Worker; CHECK: xxsldwi [[SHIFTREG:[0-9]+]], [[CONVREG]], [[CONVREG]], 3 13*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[SHIFTREG]] 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine i64 @f64toi64(double %a) { 17*9880d681SAndroid Build Coastguard Workerentry: 18*9880d681SAndroid Build Coastguard Worker %0 = bitcast double %a to i64 19*9880d681SAndroid Build Coastguard Worker ret i64 %0 20*9880d681SAndroid Build Coastguard Worker; CHECK-P7: stxsdx 1, 21*9880d681SAndroid Build Coastguard Worker; CHECK-P7: ld 3, 22*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrd 3, 1 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine float @i32tof32(i32 signext %a) { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a to float 28*9880d681SAndroid Build Coastguard Worker ret float %0 29*9880d681SAndroid Build Coastguard Worker; CHECK-P7: stw 3, 30*9880d681SAndroid Build Coastguard Worker; CHECK-P7: lfs 1, 31*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrd [[MOVEREG:[0-9]+]], 3 32*9880d681SAndroid Build Coastguard Worker; CHECK: xxsldwi [[SHIFTREG:[0-9]+]], [[MOVEREG]], [[MOVEREG]], 1 33*9880d681SAndroid Build Coastguard Worker; CHECK: xscvspdpn 1, [[SHIFTREG]] 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine double @i64tof64(i64 %a) { 37*9880d681SAndroid Build Coastguard Workerentry: 38*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64 %a to double 39*9880d681SAndroid Build Coastguard Worker ret double %0 40*9880d681SAndroid Build Coastguard Worker; CHECK-P7: std 3, 41*9880d681SAndroid Build Coastguard Worker; CHECK-P7: lxsdx 1, 42*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrd 1, 3 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @f32toi32u(float %a) { 46*9880d681SAndroid Build Coastguard Workerentry: 47*9880d681SAndroid Build Coastguard Worker %0 = bitcast float %a to i32 48*9880d681SAndroid Build Coastguard Worker ret i32 %0 49*9880d681SAndroid Build Coastguard Worker; CHECK-P7: stfs 1, 50*9880d681SAndroid Build Coastguard Worker; CHECK-P7: lwz 3, 51*9880d681SAndroid Build Coastguard Worker; CHECK: xscvdpspn [[CONVREG:[0-9]+]], 1 52*9880d681SAndroid Build Coastguard Worker; CHECK: xxsldwi [[SHIFTREG:[0-9]+]], [[CONVREG]], [[CONVREG]], 3 53*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrwz 3, [[SHIFTREG]] 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdefine i64 @f64toi64u(double %a) { 57*9880d681SAndroid Build Coastguard Workerentry: 58*9880d681SAndroid Build Coastguard Worker %0 = bitcast double %a to i64 59*9880d681SAndroid Build Coastguard Worker ret i64 %0 60*9880d681SAndroid Build Coastguard Worker; CHECK-P7: stxsdx 1, 61*9880d681SAndroid Build Coastguard Worker; CHECK-P7: ld 3, 62*9880d681SAndroid Build Coastguard Worker; CHECK: mfvsrd 3, 1 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine float @i32utof32(i32 zeroext %a) { 66*9880d681SAndroid Build Coastguard Workerentry: 67*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32 %a to float 68*9880d681SAndroid Build Coastguard Worker ret float %0 69*9880d681SAndroid Build Coastguard Worker; CHECK-P7: stw 3, 70*9880d681SAndroid Build Coastguard Worker; CHECK-P7: lfs 1, 71*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrd [[MOVEREG:[0-9]+]], 3 72*9880d681SAndroid Build Coastguard Worker; CHECK: xxsldwi [[SHIFTREG:[0-9]+]], [[MOVEREG]], [[MOVEREG]], 1 73*9880d681SAndroid Build Coastguard Worker; CHECK: xscvspdpn 1, [[SHIFTREG]] 74*9880d681SAndroid Build Coastguard Worker} 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerdefine double @i64utof64(i64 %a) { 77*9880d681SAndroid Build Coastguard Workerentry: 78*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64 %a to double 79*9880d681SAndroid Build Coastguard Worker ret double %0 80*9880d681SAndroid Build Coastguard Worker; CHECK-P7: std 3, 81*9880d681SAndroid Build Coastguard Worker; CHECK-P7: lxsdx 1, 82*9880d681SAndroid Build Coastguard Worker; CHECK: mtvsrd 1, 3 83*9880d681SAndroid Build Coastguard Worker} 84