1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr6 -mattr=+altivec < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Check vector round to single-precision toward -infinity (vrfim) 4*9880d681SAndroid Build Coastguard Worker; instruction generation using Altivec. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64" 7*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu" 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.floor.v2f64(<2 x double> %p) 10*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @floor_v2f64(<2 x double> %p) 11*9880d681SAndroid Build Coastguard Worker{ 12*9880d681SAndroid Build Coastguard Worker %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p) 13*9880d681SAndroid Build Coastguard Worker ret <2 x double> %t 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_v2f64: 16*9880d681SAndroid Build Coastguard Worker; CHECK: frim 17*9880d681SAndroid Build Coastguard Worker; CHECK: frim 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.floor.v4f64(<4 x double> %p) 20*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @floor_v4f64(<4 x double> %p) 21*9880d681SAndroid Build Coastguard Worker{ 22*9880d681SAndroid Build Coastguard Worker %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p) 23*9880d681SAndroid Build Coastguard Worker ret <4 x double> %t 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_v4f64: 26*9880d681SAndroid Build Coastguard Worker; CHECK: frim 27*9880d681SAndroid Build Coastguard Worker; CHECK: frim 28*9880d681SAndroid Build Coastguard Worker; CHECK: frim 29*9880d681SAndroid Build Coastguard Worker; CHECK: frim 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.ceil.v2f64(<2 x double> %p) 32*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @ceil_v2f64(<2 x double> %p) 33*9880d681SAndroid Build Coastguard Worker{ 34*9880d681SAndroid Build Coastguard Worker %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p) 35*9880d681SAndroid Build Coastguard Worker ret <2 x double> %t 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ceil_v2f64: 38*9880d681SAndroid Build Coastguard Worker; CHECK: frip 39*9880d681SAndroid Build Coastguard Worker; CHECK: frip 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.ceil.v4f64(<4 x double> %p) 42*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @ceil_v4f64(<4 x double> %p) 43*9880d681SAndroid Build Coastguard Worker{ 44*9880d681SAndroid Build Coastguard Worker %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p) 45*9880d681SAndroid Build Coastguard Worker ret <4 x double> %t 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ceil_v4f64: 48*9880d681SAndroid Build Coastguard Worker; CHECK: frip 49*9880d681SAndroid Build Coastguard Worker; CHECK: frip 50*9880d681SAndroid Build Coastguard Worker; CHECK: frip 51*9880d681SAndroid Build Coastguard Worker; CHECK: frip 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.trunc.v2f64(<2 x double> %p) 54*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @trunc_v2f64(<2 x double> %p) 55*9880d681SAndroid Build Coastguard Worker{ 56*9880d681SAndroid Build Coastguard Worker %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p) 57*9880d681SAndroid Build Coastguard Worker ret <2 x double> %t 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: trunc_v2f64: 60*9880d681SAndroid Build Coastguard Worker; CHECK: friz 61*9880d681SAndroid Build Coastguard Worker; CHECK: friz 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.trunc.v4f64(<4 x double> %p) 64*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @trunc_v4f64(<4 x double> %p) 65*9880d681SAndroid Build Coastguard Worker{ 66*9880d681SAndroid Build Coastguard Worker %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p) 67*9880d681SAndroid Build Coastguard Worker ret <4 x double> %t 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: trunc_v4f64: 70*9880d681SAndroid Build Coastguard Worker; CHECK: friz 71*9880d681SAndroid Build Coastguard Worker; CHECK: friz 72*9880d681SAndroid Build Coastguard Worker; CHECK: friz 73*9880d681SAndroid Build Coastguard Worker; CHECK: friz 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p) 76*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @nearbyint_v2f64(<2 x double> %p) 77*9880d681SAndroid Build Coastguard Worker{ 78*9880d681SAndroid Build Coastguard Worker %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p) 79*9880d681SAndroid Build Coastguard Worker ret <2 x double> %t 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_v2f64: 82*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint 83*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p) 86*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @nearbyint_v4f64(<4 x double> %p) 87*9880d681SAndroid Build Coastguard Worker{ 88*9880d681SAndroid Build Coastguard Worker %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p) 89*9880d681SAndroid Build Coastguard Worker ret <4 x double> %t 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_v4f64: 92*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint 93*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint 94*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint 95*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.floor.v4f32(<4 x float> %p) 99*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @floor_v4f32(<4 x float> %p) 100*9880d681SAndroid Build Coastguard Worker{ 101*9880d681SAndroid Build Coastguard Worker %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p) 102*9880d681SAndroid Build Coastguard Worker ret <4 x float> %t 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_v4f32: 105*9880d681SAndroid Build Coastguard Worker; CHECK: vrfim 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.floor.v8f32(<8 x float> %p) 108*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @floor_v8f32(<8 x float> %p) 109*9880d681SAndroid Build Coastguard Worker{ 110*9880d681SAndroid Build Coastguard Worker %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p) 111*9880d681SAndroid Build Coastguard Worker ret <8 x float> %t 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_v8f32: 114*9880d681SAndroid Build Coastguard Worker; CHECK: vrfim 115*9880d681SAndroid Build Coastguard Worker; CHECK: vrfim 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.ceil.v4f32(<4 x float> %p) 118*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @ceil_v4f32(<4 x float> %p) 119*9880d681SAndroid Build Coastguard Worker{ 120*9880d681SAndroid Build Coastguard Worker %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p) 121*9880d681SAndroid Build Coastguard Worker ret <4 x float> %t 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ceil_v4f32: 124*9880d681SAndroid Build Coastguard Worker; CHECK: vrfip 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.ceil.v8f32(<8 x float> %p) 127*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @ceil_v8f32(<8 x float> %p) 128*9880d681SAndroid Build Coastguard Worker{ 129*9880d681SAndroid Build Coastguard Worker %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p) 130*9880d681SAndroid Build Coastguard Worker ret <8 x float> %t 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ceil_v8f32: 133*9880d681SAndroid Build Coastguard Worker; CHECK: vrfip 134*9880d681SAndroid Build Coastguard Worker; CHECK: vrfip 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.trunc.v4f32(<4 x float> %p) 137*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @trunc_v4f32(<4 x float> %p) 138*9880d681SAndroid Build Coastguard Worker{ 139*9880d681SAndroid Build Coastguard Worker %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p) 140*9880d681SAndroid Build Coastguard Worker ret <4 x float> %t 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: trunc_v4f32: 143*9880d681SAndroid Build Coastguard Worker; CHECK: vrfiz 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.trunc.v8f32(<8 x float> %p) 146*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @trunc_v8f32(<8 x float> %p) 147*9880d681SAndroid Build Coastguard Worker{ 148*9880d681SAndroid Build Coastguard Worker %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p) 149*9880d681SAndroid Build Coastguard Worker ret <8 x float> %t 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: trunc_v8f32: 152*9880d681SAndroid Build Coastguard Worker; CHECK: vrfiz 153*9880d681SAndroid Build Coastguard Worker; CHECK: vrfiz 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p) 156*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @nearbyint_v4f32(<4 x float> %p) 157*9880d681SAndroid Build Coastguard Worker{ 158*9880d681SAndroid Build Coastguard Worker %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p) 159*9880d681SAndroid Build Coastguard Worker ret <4 x float> %t 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_v4f32: 162*9880d681SAndroid Build Coastguard Worker; CHECK: vrfin 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p) 165*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @nearbyint_v8f32(<8 x float> %p) 166*9880d681SAndroid Build Coastguard Worker{ 167*9880d681SAndroid Build Coastguard Worker %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p) 168*9880d681SAndroid Build Coastguard Worker ret <8 x float> %t 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_v8f32: 171*9880d681SAndroid Build Coastguard Worker; CHECK: vrfin 172*9880d681SAndroid Build Coastguard Worker; CHECK: vrfin 173