brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.7 KiB · e859dee Raw
398 lines · plain
1; RUN: llc -verify-machineinstrs -O0 %s -mtriple=spirv32-unknown-unknown -o - | FileCheck %s2 3declare float @llvm.fabs.f32(float)4declare float @llvm.rint.f32(float)5declare float @llvm.nearbyint.f32(float)6declare float @llvm.floor.f32(float)7declare float @llvm.ceil.f32(float)8declare float @llvm.round.f32(float)9declare float @llvm.trunc.f32(float)10declare float @llvm.sqrt.f32(float)11declare float @llvm.sin.f32(float)12declare float @llvm.cos.f32(float)13declare float @llvm.exp2.f32(float)14declare float @llvm.log.f32(float)15declare float @llvm.log10.f32(float)16declare float @llvm.log2.f32(float)17declare float @llvm.minnum.f32(float, float)18declare float @llvm.maxnum.f32(float, float)19declare <2 x half> @llvm.fabs.v2f16(<2 x half>)20declare <2 x half> @llvm.rint.v2f16(<2 x half>)21declare <2 x half> @llvm.nearbyint.v2f16(<2 x half>)22declare <2 x half> @llvm.floor.v2f16(<2 x half>)23declare <2 x half> @llvm.ceil.v2f16(<2 x half>)24declare <2 x half> @llvm.round.v2f16(<2 x half>)25declare <2 x half> @llvm.trunc.v2f16(<2 x half>)26declare <2 x half> @llvm.sqrt.v2f16(<2 x half>)27declare <2 x half> @llvm.sin.v2f16(<2 x half>)28declare <2 x half> @llvm.cos.v2f16(<2 x half>)29declare <2 x half> @llvm.exp2.v2f16(<2 x half>)30declare <2 x half> @llvm.log.v2f16(<2 x half>)31declare <2 x half> @llvm.log10.v2f16(<2 x half>)32declare <2 x half> @llvm.log2.v2f16(<2 x half>)33 34; CHECK-DAG: OpName %[[#SCALAR_FABS:]] "scalar_fabs"35; CHECK-DAG: OpName %[[#SCALAR_RINT:]] "scalar_rint"36; CHECK-DAG: OpName %[[#SCALAR_NEARBYINT:]] "scalar_nearbyint"37; CHECK-DAG: OpName %[[#SCALAR_FLOOR:]] "scalar_floor"38; CHECK-DAG: OpName %[[#SCALAR_CEIL:]] "scalar_ceil"39; CHECK-DAG: OpName %[[#SCALAR_ROUND:]] "scalar_round"40; CHECK-DAG: OpName %[[#SCALAR_TRUNC:]] "scalar_trunc"41; CHECK-DAG: OpName %[[#SCALAR_SQRT:]] "scalar_sqrt"42; CHECK-DAG: OpName %[[#SCALAR_SIN:]] "scalar_sin"43; CHECK-DAG: OpName %[[#SCALAR_COS:]] "scalar_cos"44; CHECK-DAG: OpName %[[#SCALAR_EXP2:]] "scalar_exp2"45; CHECK-DAG: OpName %[[#SCALAR_LOG:]] "scalar_log"46; CHECK-DAG: OpName %[[#SCALAR_LOG10:]] "scalar_log10"47; CHECK-DAG: OpName %[[#SCALAR_LOG2:]] "scalar_log2"48; CHECK-DAG: OpName %[[#SCALAR_MINNUM:]] "scalar_minnum"49; CHECK-DAG: OpName %[[#SCALAR_MAXNUM:]] "scalar_maxnum"50; CHECK-DAG: OpName %[[#VECTOR_FABS:]] "vector_fabs"51; CHECK-DAG: OpName %[[#VECTOR_RINT:]] "vector_rint"52; CHECK-DAG: OpName %[[#VECTOR_NEARBYINT:]] "vector_nearbyint"53; CHECK-DAG: OpName %[[#VECTOR_FLOOR:]] "vector_floor"54; CHECK-DAG: OpName %[[#VECTOR_CEIL:]] "vector_ceil"55; CHECK-DAG: OpName %[[#VECTOR_ROUND:]] "vector_round"56; CHECK-DAG: OpName %[[#VECTOR_TRUNC:]] "vector_trunc"57; CHECK-DAG: OpName %[[#VECTOR_SQRT:]] "vector_sqrt"58; CHECK-DAG: OpName %[[#VECTOR_SIN:]] "vector_sin"59; CHECK-DAG: OpName %[[#VECTOR_COS:]] "vector_cos"60; CHECK-DAG: OpName %[[#VECTOR_EXP2:]] "vector_exp2"61; CHECK-DAG: OpName %[[#VECTOR_LOG:]] "vector_log"62; CHECK-DAG: OpName %[[#VECTOR_LOG10:]] "vector_log10"63; CHECK-DAG: OpName %[[#VECTOR_LOG2:]] "vector_log2"64 65; CHECK-DAG: %[[#CLEXT:]] = OpExtInstImport "OpenCL.std"66 67; CHECK:      %[[#SCALAR_FABS]] = OpFunction68; CHECK-NEXT: %[[#A:]] = OpFunctionParameter69; CHECK:      OpLabel70; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] fabs %[[#A]]71; CHECK:      OpReturnValue %[[#R]]72; CHECK-NEXT: OpFunctionEnd73define float @scalar_fabs(float %a) {74    %r = call float @llvm.fabs.f32(float %a)75    ret float %r76}77 78; CHECK:      %[[#SCALAR_RINT]] = OpFunction79; CHECK-NEXT: %[[#A:]] = OpFunctionParameter80; CHECK:      OpLabel81; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] rint %[[#A]]82; CHECK:      OpReturnValue %[[#R]]83; CHECK-NEXT: OpFunctionEnd84define float @scalar_rint(float %a) {85    %r = call float @llvm.rint.f32(float %a)86    ret float %r87}88 89; CHECK:      %[[#SCALAR_NEARBYINT]] = OpFunction90; CHECK-NEXT: %[[#A:]] = OpFunctionParameter91; CHECK:      OpLabel92; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] rint %[[#A]]93; CHECK:      OpReturnValue %[[#R]]94; CHECK-NEXT: OpFunctionEnd95define float @scalar_nearbyint(float %a) {96    %r = call float @llvm.nearbyint.f32(float %a)97    ret float %r98}99 100; CHECK:      %[[#SCALAR_FLOOR]] = OpFunction101; CHECK-NEXT: %[[#A:]] = OpFunctionParameter102; CHECK:      OpLabel103; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] floor %[[#A]]104; CHECK:      OpReturnValue %[[#R]]105; CHECK-NEXT: OpFunctionEnd106define float @scalar_floor(float %a) {107    %r = call float @llvm.floor.f32(float %a)108    ret float %r109}110 111; CHECK:      %[[#SCALAR_CEIL]] = OpFunction112; CHECK-NEXT: %[[#A:]] = OpFunctionParameter113; CHECK:      OpLabel114; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] ceil %[[#A]]115; CHECK:      OpReturnValue %[[#R]]116; CHECK-NEXT: OpFunctionEnd117define float @scalar_ceil(float %a) {118    %r = call float @llvm.ceil.f32(float %a)119    ret float %r120}121 122; CHECK:      %[[#SCALAR_ROUND]] = OpFunction123; CHECK-NEXT: %[[#A:]] = OpFunctionParameter124; CHECK:      OpLabel125; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] round %[[#A]]126; CHECK:      OpReturnValue %[[#R]]127; CHECK-NEXT: OpFunctionEnd128define float @scalar_round(float %a) {129    %r = call float @llvm.round.f32(float %a)130    ret float %r131}132 133; CHECK:      %[[#SCALAR_TRUNC]] = OpFunction134; CHECK-NEXT: %[[#A:]] = OpFunctionParameter135; CHECK:      OpLabel136; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] trunc %[[#A]]137; CHECK:      OpReturnValue %[[#R]]138; CHECK-NEXT: OpFunctionEnd139define float @scalar_trunc(float %a) {140    %r = call float @llvm.trunc.f32(float %a)141    ret float %r142}143 144; CHECK:      %[[#SCALAR_SQRT]] = OpFunction145; CHECK-NEXT: %[[#A:]] = OpFunctionParameter146; CHECK:      OpLabel147; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] sqrt %[[#A]]148; CHECK:      OpReturnValue %[[#R]]149; CHECK-NEXT: OpFunctionEnd150define float @scalar_sqrt(float %a) {151    %r = call float @llvm.sqrt.f32(float %a)152    ret float %r153}154 155; CHECK:      %[[#SCALAR_SIN]] = OpFunction156; CHECK-NEXT: %[[#A:]] = OpFunctionParameter157; CHECK:      OpLabel158; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] sin %[[#A]]159; CHECK:      OpReturnValue %[[#R]]160; CHECK-NEXT: OpFunctionEnd161define float @scalar_sin(float %a) {162    %r = call float @llvm.sin.f32(float %a)163    ret float %r164}165 166; CHECK:      %[[#SCALAR_COS]] = OpFunction167; CHECK-NEXT: %[[#A:]] = OpFunctionParameter168; CHECK:      OpLabel169; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] cos %[[#A]]170; CHECK:      OpReturnValue %[[#R]]171; CHECK-NEXT: OpFunctionEnd172define float @scalar_cos(float %a) {173    %r = call float @llvm.cos.f32(float %a)174    ret float %r175}176 177; CHECK:      %[[#SCALAR_EXP2]] = OpFunction178; CHECK-NEXT: %[[#A:]] = OpFunctionParameter179; CHECK:      OpLabel180; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] exp2 %[[#A]]181; CHECK:      OpReturnValue %[[#R]]182; CHECK-NEXT: OpFunctionEnd183define float @scalar_exp2(float %a) {184    %r = call float @llvm.exp2.f32(float %a)185    ret float %r186}187 188; CHECK:      %[[#SCALAR_LOG]] = OpFunction189; CHECK-NEXT: %[[#A:]] = OpFunctionParameter190; CHECK:      OpLabel191; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] log %[[#A]]192; CHECK:      OpReturnValue %[[#R]]193; CHECK-NEXT: OpFunctionEnd194define float @scalar_log(float %a) {195    %r = call float @llvm.log.f32(float %a)196    ret float %r197}198 199; CHECK:      %[[#SCALAR_LOG10]] = OpFunction200; CHECK-NEXT: %[[#A:]] = OpFunctionParameter201; CHECK:      OpLabel202; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] log10 %[[#A]]203; CHECK:      OpReturnValue %[[#R]]204; CHECK-NEXT: OpFunctionEnd205define float @scalar_log10(float %a) {206    %r = call float @llvm.log10.f32(float %a)207    ret float %r208}209 210; CHECK:      %[[#SCALAR_LOG2]] = OpFunction211; CHECK-NEXT: %[[#A:]] = OpFunctionParameter212; CHECK:      OpLabel213; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] log2 %[[#A]]214; CHECK:      OpReturnValue %[[#R]]215; CHECK-NEXT: OpFunctionEnd216define float @scalar_log2(float %a) {217    %r = call float @llvm.log2.f32(float %a)218    ret float %r219}220 221; CHECK:      %[[#VECTOR_FABS]] = OpFunction222; CHECK-NEXT: %[[#A:]] = OpFunctionParameter223; CHECK:      OpLabel224; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] fabs %[[#A]]225; CHECK:      OpReturnValue %[[#R]]226; CHECK-NEXT: OpFunctionEnd227define <2 x half> @vector_fabs(<2 x half> %a) {228    %r = call <2 x half> @llvm.fabs.v2f16(<2 x half> %a)229    ret <2 x half> %r230}231 232; CHECK:      %[[#VECTOR_RINT]] = OpFunction233; CHECK-NEXT: %[[#A:]] = OpFunctionParameter234; CHECK:      OpLabel235; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] rint %[[#A]]236; CHECK:      OpReturnValue %[[#R]]237; CHECK-NEXT: OpFunctionEnd238define <2 x half> @vector_rint(<2 x half> %a) {239    %r = call <2 x half> @llvm.rint.v2f16(<2 x half> %a)240    ret <2 x half> %r241}242 243; CHECK:      %[[#VECTOR_NEARBYINT]] = OpFunction244; CHECK-NEXT: %[[#A:]] = OpFunctionParameter245; CHECK:      OpLabel246; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] rint %[[#A]]247; CHECK:      OpReturnValue %[[#R]]248; CHECK-NEXT: OpFunctionEnd249define <2 x half> @vector_nearbyint(<2 x half> %a) {250    %r = call <2 x half> @llvm.nearbyint.v2f16(<2 x half> %a)251    ret <2 x half> %r252}253 254; CHECK:      %[[#VECTOR_FLOOR]] = OpFunction255; CHECK-NEXT: %[[#A:]] = OpFunctionParameter256; CHECK:      OpLabel257; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] floor %[[#A]]258; CHECK:      OpReturnValue %[[#R]]259; CHECK-NEXT: OpFunctionEnd260define <2 x half> @vector_floor(<2 x half> %a) {261    %r = call <2 x half> @llvm.floor.v2f16(<2 x half> %a)262    ret <2 x half> %r263}264 265; CHECK:      %[[#VECTOR_CEIL]] = OpFunction266; CHECK-NEXT: %[[#A:]] = OpFunctionParameter267; CHECK:      OpLabel268; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] ceil %[[#A]]269; CHECK:      OpReturnValue %[[#R]]270; CHECK-NEXT: OpFunctionEnd271define <2 x half> @vector_ceil(<2 x half> %a) {272    %r = call <2 x half> @llvm.ceil.v2f16(<2 x half> %a)273    ret <2 x half> %r274}275 276; CHECK:      %[[#VECTOR_ROUND]] = OpFunction277; CHECK-NEXT: %[[#A:]] = OpFunctionParameter278; CHECK:      OpLabel279; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] round %[[#A]]280; CHECK:      OpReturnValue %[[#R]]281; CHECK-NEXT: OpFunctionEnd282define <2 x half> @vector_round(<2 x half> %a) {283    %r = call <2 x half> @llvm.round.v2f16(<2 x half> %a)284    ret <2 x half> %r285}286 287; CHECK:      %[[#VECTOR_TRUNC]] = OpFunction288; CHECK-NEXT: %[[#A:]] = OpFunctionParameter289; CHECK:      OpLabel290; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] trunc %[[#A]]291; CHECK:      OpReturnValue %[[#R]]292; CHECK-NEXT: OpFunctionEnd293define <2 x half> @vector_trunc(<2 x half> %a) {294    %r = call <2 x half> @llvm.trunc.v2f16(<2 x half> %a)295    ret <2 x half> %r296}297 298; CHECK:      %[[#VECTOR_SQRT]] = OpFunction299; CHECK-NEXT: %[[#A:]] = OpFunctionParameter300; CHECK:      OpLabel301; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] sqrt %[[#A]]302; CHECK:      OpReturnValue %[[#R]]303; CHECK-NEXT: OpFunctionEnd304define <2 x half> @vector_sqrt(<2 x half> %a) {305    %r = call <2 x half> @llvm.sqrt.v2f16(<2 x half> %a)306    ret <2 x half> %r307}308 309; CHECK:      %[[#VECTOR_SIN]] = OpFunction310; CHECK-NEXT: %[[#A:]] = OpFunctionParameter311; CHECK:      OpLabel312; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] sin %[[#A]]313; CHECK:      OpReturnValue %[[#R]]314; CHECK-NEXT: OpFunctionEnd315define <2 x half> @vector_sin(<2 x half> %a) {316    %r = call <2 x half> @llvm.sin.v2f16(<2 x half> %a)317    ret <2 x half> %r318}319 320; CHECK:      %[[#VECTOR_COS]] = OpFunction321; CHECK-NEXT: %[[#A:]] = OpFunctionParameter322; CHECK:      OpLabel323; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] cos %[[#A]]324; CHECK:      OpReturnValue %[[#R]]325; CHECK-NEXT: OpFunctionEnd326define <2 x half> @vector_cos(<2 x half> %a) {327    %r = call <2 x half> @llvm.cos.v2f16(<2 x half> %a)328    ret <2 x half> %r329}330 331; CHECK:      %[[#VECTOR_EXP2]] = OpFunction332; CHECK-NEXT: %[[#A:]] = OpFunctionParameter333; CHECK:      OpLabel334; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] exp2 %[[#A]]335; CHECK:      OpReturnValue %[[#R]]336; CHECK-NEXT: OpFunctionEnd337define <2 x half> @vector_exp2(<2 x half> %a) {338    %r = call <2 x half> @llvm.exp2.v2f16(<2 x half> %a)339    ret <2 x half> %r340}341 342; CHECK:      %[[#VECTOR_LOG]] = OpFunction343; CHECK-NEXT: %[[#A:]] = OpFunctionParameter344; CHECK:      OpLabel345; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] log %[[#A]]346; CHECK:      OpReturnValue %[[#R]]347; CHECK-NEXT: OpFunctionEnd348define <2 x half> @vector_log(<2 x half> %a) {349    %r = call <2 x half> @llvm.log.v2f16(<2 x half> %a)350    ret <2 x half> %r351}352 353; CHECK:      %[[#VECTOR_LOG10]] = OpFunction354; CHECK-NEXT: %[[#A:]] = OpFunctionParameter355; CHECK:      OpLabel356; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] log10 %[[#A]]357; CHECK:      OpReturnValue %[[#R]]358; CHECK-NEXT: OpFunctionEnd359define <2 x half> @vector_log10(<2 x half> %a) {360    %r = call <2 x half> @llvm.log10.v2f16(<2 x half> %a)361    ret <2 x half> %r362}363 364; CHECK:      %[[#VECTOR_LOG2]] = OpFunction365; CHECK-NEXT: %[[#A:]] = OpFunctionParameter366; CHECK:      OpLabel367; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] log2 %[[#A]]368; CHECK:      OpReturnValue %[[#R]]369; CHECK-NEXT: OpFunctionEnd370define <2 x half> @vector_log2(<2 x half> %a) {371    %r = call <2 x half> @llvm.log2.v2f16(<2 x half> %a)372    ret <2 x half> %r373}374 375; CHECK:      %[[#SCALAR_MINNUM]] = OpFunction376; CHECK-NEXT: %[[#A:]] = OpFunctionParameter377; CHECK-NEXT: %[[#B:]] = OpFunctionParameter378; CHECK:      OpLabel379; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] fmin %[[#A]] %[[#B]]380; CHECK:      OpReturnValue %[[#R]]381; CHECK-NEXT: OpFunctionEnd382define float @scalar_minnum(float %A, float %B) {383  %r = call float @llvm.minnum.f32(float %A, float %B)384  ret float %r385}386 387; CHECK:      %[[#SCALAR_MAXNUM]] = OpFunction388; CHECK-NEXT: %[[#A:]] = OpFunctionParameter389; CHECK-NEXT: %[[#B:]] = OpFunctionParameter390; CHECK:      OpLabel391; CHECK:      %[[#R:]] = OpExtInst %[[#]] %[[#CLEXT]] fmax %[[#A]] %[[#B]]392; CHECK:      OpReturnValue %[[#R]]393; CHECK-NEXT: OpFunctionEnd394define float @scalar_maxnum(float %A, float %B) {395  %r = call float @llvm.maxnum.f32(float %A, float %B)396  ret float %r397}398