252 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \3; RUN: -mcpu=pwr6 -mattr=+altivec < %s | FileCheck %s4 5; Check vector round to single-precision toward -infinity (vrfim)6; instruction generation using Altivec.7 8declare <2 x double> @llvm.floor.v2f64(<2 x double> %p)9define <2 x double> @floor_v2f64(<2 x double> %p)10; CHECK-LABEL: floor_v2f64:11; CHECK: # %bb.0:12; CHECK-NEXT: frim 1, 113; CHECK-NEXT: frim 2, 214; CHECK-NEXT: blr15{16 %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)17 ret <2 x double> %t18}19 20declare <4 x double> @llvm.floor.v4f64(<4 x double> %p)21define <4 x double> @floor_v4f64(<4 x double> %p)22; CHECK-LABEL: floor_v4f64:23; CHECK: # %bb.0:24; CHECK-NEXT: frim 1, 125; CHECK-NEXT: frim 2, 226; CHECK-NEXT: frim 3, 327; CHECK-NEXT: frim 4, 428; CHECK-NEXT: blr29{30 %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)31 ret <4 x double> %t32}33 34declare <2 x double> @llvm.ceil.v2f64(<2 x double> %p)35define <2 x double> @ceil_v2f64(<2 x double> %p)36; CHECK-LABEL: ceil_v2f64:37; CHECK: # %bb.0:38; CHECK-NEXT: frip 1, 139; CHECK-NEXT: frip 2, 240; CHECK-NEXT: blr41{42 %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)43 ret <2 x double> %t44}45 46declare <4 x double> @llvm.ceil.v4f64(<4 x double> %p)47define <4 x double> @ceil_v4f64(<4 x double> %p)48; CHECK-LABEL: ceil_v4f64:49; CHECK: # %bb.0:50; CHECK-NEXT: frip 1, 151; CHECK-NEXT: frip 2, 252; CHECK-NEXT: frip 3, 353; CHECK-NEXT: frip 4, 454; CHECK-NEXT: blr55{56 %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)57 ret <4 x double> %t58}59 60declare <2 x double> @llvm.trunc.v2f64(<2 x double> %p)61define <2 x double> @trunc_v2f64(<2 x double> %p)62; CHECK-LABEL: trunc_v2f64:63; CHECK: # %bb.0:64; CHECK-NEXT: friz 1, 165; CHECK-NEXT: friz 2, 266; CHECK-NEXT: blr67{68 %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)69 ret <2 x double> %t70}71 72declare <4 x double> @llvm.trunc.v4f64(<4 x double> %p)73define <4 x double> @trunc_v4f64(<4 x double> %p)74; CHECK-LABEL: trunc_v4f64:75; CHECK: # %bb.0:76; CHECK-NEXT: friz 1, 177; CHECK-NEXT: friz 2, 278; CHECK-NEXT: friz 3, 379; CHECK-NEXT: friz 4, 480; CHECK-NEXT: blr81{82 %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)83 ret <4 x double> %t84}85 86declare <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)87define <2 x double> @nearbyint_v2f64(<2 x double> %p) nounwind88; CHECK-LABEL: nearbyint_v2f64:89; CHECK: # %bb.0:90; CHECK-NEXT: mflr 091; CHECK-NEXT: stdu 1, -128(1)92; CHECK-NEXT: std 0, 144(1)93; CHECK-NEXT: stfd 30, 112(1) # 8-byte Folded Spill94; CHECK-NEXT: stfd 31, 120(1) # 8-byte Folded Spill95; CHECK-NEXT: fmr 31, 296; CHECK-NEXT: bl nearbyint97; CHECK-NEXT: nop98; CHECK-NEXT: fmr 30, 199; CHECK-NEXT: fmr 1, 31100; CHECK-NEXT: bl nearbyint101; CHECK-NEXT: nop102; CHECK-NEXT: fmr 2, 1103; CHECK-NEXT: fmr 1, 30104; CHECK-NEXT: lfd 31, 120(1) # 8-byte Folded Reload105; CHECK-NEXT: lfd 30, 112(1) # 8-byte Folded Reload106; CHECK-NEXT: addi 1, 1, 128107; CHECK-NEXT: ld 0, 16(1)108; CHECK-NEXT: mtlr 0109; CHECK-NEXT: blr110{111 %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)112 ret <2 x double> %t113}114 115declare <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)116define <4 x double> @nearbyint_v4f64(<4 x double> %p) nounwind117; CHECK-LABEL: nearbyint_v4f64:118; CHECK: # %bb.0:119; CHECK-NEXT: mflr 0120; CHECK-NEXT: stdu 1, -144(1)121; CHECK-NEXT: std 0, 160(1)122; CHECK-NEXT: stfd 28, 112(1) # 8-byte Folded Spill123; CHECK-NEXT: stfd 29, 120(1) # 8-byte Folded Spill124; CHECK-NEXT: fmr 29, 2125; CHECK-NEXT: stfd 30, 128(1) # 8-byte Folded Spill126; CHECK-NEXT: fmr 30, 3127; CHECK-NEXT: stfd 31, 136(1) # 8-byte Folded Spill128; CHECK-NEXT: fmr 31, 4129; CHECK-NEXT: bl nearbyint130; CHECK-NEXT: nop131; CHECK-NEXT: fmr 28, 1132; CHECK-NEXT: fmr 1, 29133; CHECK-NEXT: bl nearbyint134; CHECK-NEXT: nop135; CHECK-NEXT: fmr 29, 1136; CHECK-NEXT: fmr 1, 30137; CHECK-NEXT: bl nearbyint138; CHECK-NEXT: nop139; CHECK-NEXT: fmr 30, 1140; CHECK-NEXT: fmr 1, 31141; CHECK-NEXT: bl nearbyint142; CHECK-NEXT: nop143; CHECK-NEXT: fmr 4, 1144; CHECK-NEXT: fmr 1, 28145; CHECK-NEXT: lfd 31, 136(1) # 8-byte Folded Reload146; CHECK-NEXT: lfd 28, 112(1) # 8-byte Folded Reload147; CHECK-NEXT: fmr 2, 29148; CHECK-NEXT: fmr 3, 30149; CHECK-NEXT: lfd 30, 128(1) # 8-byte Folded Reload150; CHECK-NEXT: lfd 29, 120(1) # 8-byte Folded Reload151; CHECK-NEXT: addi 1, 1, 144152; CHECK-NEXT: ld 0, 16(1)153; CHECK-NEXT: mtlr 0154; CHECK-NEXT: blr155{156 %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)157 ret <4 x double> %t158}159 160 161declare <4 x float> @llvm.floor.v4f32(<4 x float> %p)162define <4 x float> @floor_v4f32(<4 x float> %p)163; CHECK-LABEL: floor_v4f32:164; CHECK: # %bb.0:165; CHECK-NEXT: vrfim 2, 2166; CHECK-NEXT: blr167{168 %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)169 ret <4 x float> %t170}171 172declare <8 x float> @llvm.floor.v8f32(<8 x float> %p)173define <8 x float> @floor_v8f32(<8 x float> %p)174; CHECK-LABEL: floor_v8f32:175; CHECK: # %bb.0:176; CHECK-NEXT: vrfim 2, 2177; CHECK-NEXT: vrfim 3, 3178; CHECK-NEXT: blr179{180 %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)181 ret <8 x float> %t182}183 184declare <4 x float> @llvm.ceil.v4f32(<4 x float> %p)185define <4 x float> @ceil_v4f32(<4 x float> %p)186; CHECK-LABEL: ceil_v4f32:187; CHECK: # %bb.0:188; CHECK-NEXT: vrfip 2, 2189; CHECK-NEXT: blr190{191 %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)192 ret <4 x float> %t193}194 195declare <8 x float> @llvm.ceil.v8f32(<8 x float> %p)196define <8 x float> @ceil_v8f32(<8 x float> %p)197; CHECK-LABEL: ceil_v8f32:198; CHECK: # %bb.0:199; CHECK-NEXT: vrfip 2, 2200; CHECK-NEXT: vrfip 3, 3201; CHECK-NEXT: blr202{203 %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)204 ret <8 x float> %t205}206 207declare <4 x float> @llvm.trunc.v4f32(<4 x float> %p)208define <4 x float> @trunc_v4f32(<4 x float> %p)209; CHECK-LABEL: trunc_v4f32:210; CHECK: # %bb.0:211; CHECK-NEXT: vrfiz 2, 2212; CHECK-NEXT: blr213{214 %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)215 ret <4 x float> %t216}217 218declare <8 x float> @llvm.trunc.v8f32(<8 x float> %p)219define <8 x float> @trunc_v8f32(<8 x float> %p)220; CHECK-LABEL: trunc_v8f32:221; CHECK: # %bb.0:222; CHECK-NEXT: vrfiz 2, 2223; CHECK-NEXT: vrfiz 3, 3224; CHECK-NEXT: blr225{226 %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)227 ret <8 x float> %t228}229 230declare <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)231define <4 x float> @nearbyint_v4f32(<4 x float> %p)232; CHECK-LABEL: nearbyint_v4f32:233; CHECK: # %bb.0:234; CHECK-NEXT: vrfin 2, 2235; CHECK-NEXT: blr236{237 %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)238 ret <4 x float> %t239}240 241declare <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)242define <8 x float> @nearbyint_v8f32(<8 x float> %p)243; CHECK-LABEL: nearbyint_v8f32:244; CHECK: # %bb.0:245; CHECK-NEXT: vrfin 2, 2246; CHECK-NEXT: vrfin 3, 3247; CHECK-NEXT: blr248{249 %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)250 ret <8 x float> %t251}252