brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.9 KiB · 070c765 Raw
306 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes='function(scalarizer)' %s | FileCheck %s3 4; Unary fp5declare <2 x float> @llvm.sqrt.v2f32(<2 x float>)6 7; Binary fp8declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>)9declare <2 x float> @llvm.minimum.v2f32(<2 x float>, <2 x float>)10declare <2 x float> @llvm.maximum.v2f32(<2 x float>, <2 x float>)11declare <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float>, <2 x i32>)12 13; Ternary fp14declare <2 x float> @llvm.fma.v2f32(<2 x float>, <2 x float>, <2 x float>)15 16; Unary int17declare <2 x i32> @llvm.bswap.v2i32(<2 x i32>)18 19; Unary int plus constant scalar operand20declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1)21 22; Unary fp plus any scalar operand23declare <2 x float> @llvm.powi.v2f32.i32(<2 x float>, i32)24 25; Binary int plus constant scalar operand26declare <2 x i32> @llvm.smul.fix.sat.v2i32(<2 x i32>, <2 x i32>, i32)27declare <2 x i32> @llvm.umul.fix.sat.v2i32(<2 x i32>, <2 x i32>, i32)28 29; Unary fp operand, int return type30declare <2 x i32> @llvm.fptosi.sat.v2i32.v2f32(<2 x float>)31declare <2 x i32> @llvm.fptoui.sat.v2i32.v2f32(<2 x float>)32 33; Unary fp operand, int return type34declare <2 x i32> @llvm.lrint.v2i32.v2f32(<2 x float>)35declare <2 x i32> @llvm.llrint.v2i32.v2f32(<2 x float>)36declare <2 x i32> @llvm.lround.v2i32.v2f32(<2 x float>)37declare <2 x i32> @llvm.llround.v2i32.v2f32(<2 x float>)38 39; Bool return type, overloaded on fp operand type40declare <2 x i1> @llvm.is.fpclass(<2 x float>, i32)41 42 43define <2 x float> @scalarize_sqrt_v2f32(<2 x float> %x) #0 {44; CHECK-LABEL: @scalarize_sqrt_v2f32(45; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 046; CHECK-NEXT:    [[SQRT_I0:%.*]] = call float @llvm.sqrt.f32(float [[X_I0]])47; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 148; CHECK-NEXT:    [[SQRT_I1:%.*]] = call float @llvm.sqrt.f32(float [[X_I1]])49; CHECK-NEXT:    [[SQRT_UPTO0:%.*]] = insertelement <2 x float> poison, float [[SQRT_I0]], i64 050; CHECK-NEXT:    [[SQRT:%.*]] = insertelement <2 x float> [[SQRT_UPTO0]], float [[SQRT_I1]], i64 151; CHECK-NEXT:    ret <2 x float> [[SQRT]]52;53  %sqrt = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %x)54  ret <2 x float> %sqrt55}56 57define <2 x float> @scalarize_minnum_v2f32(<2 x float> %x, <2 x float> %y) #0 {58; CHECK-LABEL: @scalarize_minnum_v2f32(59; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 060; CHECK-NEXT:    [[Y_I0:%.*]] = extractelement <2 x float> [[Y:%.*]], i64 061; CHECK-NEXT:    [[MINNUM_I0:%.*]] = call float @llvm.minnum.f32(float [[X_I0]], float [[Y_I0]])62; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 163; CHECK-NEXT:    [[Y_I1:%.*]] = extractelement <2 x float> [[Y]], i64 164; CHECK-NEXT:    [[MINNUM_I1:%.*]] = call float @llvm.minnum.f32(float [[X_I1]], float [[Y_I1]])65; CHECK-NEXT:    [[MINNUM_UPTO0:%.*]] = insertelement <2 x float> poison, float [[MINNUM_I0]], i64 066; CHECK-NEXT:    [[MINNUM:%.*]] = insertelement <2 x float> [[MINNUM_UPTO0]], float [[MINNUM_I1]], i64 167; CHECK-NEXT:    ret <2 x float> [[MINNUM]]68;69  %minnum = call <2 x float> @llvm.minnum.v2f32(<2 x float> %x, <2 x float> %y)70  ret <2 x float> %minnum71}72 73define <2 x float> @scalarize_minimum_v2f32(<2 x float> %x, <2 x float> %y) #0 {74; CHECK-LABEL: @scalarize_minimum_v2f32(75; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 076; CHECK-NEXT:    [[Y_I0:%.*]] = extractelement <2 x float> [[Y:%.*]], i64 077; CHECK-NEXT:    [[MINIMUM_I0:%.*]] = call float @llvm.minimum.f32(float [[X_I0]], float [[Y_I0]])78; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 179; CHECK-NEXT:    [[Y_I1:%.*]] = extractelement <2 x float> [[Y]], i64 180; CHECK-NEXT:    [[MINIMUM_I1:%.*]] = call float @llvm.minimum.f32(float [[X_I1]], float [[Y_I1]])81; CHECK-NEXT:    [[MINIMUM_UPTO0:%.*]] = insertelement <2 x float> poison, float [[MINIMUM_I0]], i64 082; CHECK-NEXT:    [[MINIMUM:%.*]] = insertelement <2 x float> [[MINIMUM_UPTO0]], float [[MINIMUM_I1]], i64 183; CHECK-NEXT:    ret <2 x float> [[MINIMUM]]84;85  %minimum = call <2 x float> @llvm.minimum.v2f32(<2 x float> %x, <2 x float> %y)86  ret <2 x float> %minimum87}88 89define <2 x float> @scalarize_maximum_v2f32(<2 x float> %x, <2 x float> %y) #0 {90; CHECK-LABEL: @scalarize_maximum_v2f32(91; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 092; CHECK-NEXT:    [[Y_I0:%.*]] = extractelement <2 x float> [[Y:%.*]], i64 093; CHECK-NEXT:    [[MAXIMUM_I0:%.*]] = call float @llvm.maximum.f32(float [[X_I0]], float [[Y_I0]])94; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 195; CHECK-NEXT:    [[Y_I1:%.*]] = extractelement <2 x float> [[Y]], i64 196; CHECK-NEXT:    [[MAXIMUM_I1:%.*]] = call float @llvm.maximum.f32(float [[X_I1]], float [[Y_I1]])97; CHECK-NEXT:    [[MAXIMUM_UPTO0:%.*]] = insertelement <2 x float> poison, float [[MAXIMUM_I0]], i64 098; CHECK-NEXT:    [[MAXIMUM:%.*]] = insertelement <2 x float> [[MAXIMUM_UPTO0]], float [[MAXIMUM_I1]], i64 199; CHECK-NEXT:    ret <2 x float> [[MAXIMUM]]100;101  %maximum = call <2 x float> @llvm.maximum.v2f32(<2 x float> %x, <2 x float> %y)102  ret <2 x float> %maximum103}104 105define <2 x float> @scalarize_fma_v2f32(<2 x float> %x, <2 x float> %y, <2 x float> %z) #0 {106; CHECK-LABEL: @scalarize_fma_v2f32(107; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0108; CHECK-NEXT:    [[Y_I0:%.*]] = extractelement <2 x float> [[Y:%.*]], i64 0109; CHECK-NEXT:    [[Z_I0:%.*]] = extractelement <2 x float> [[Z:%.*]], i64 0110; CHECK-NEXT:    [[FMA_I0:%.*]] = call float @llvm.fma.f32(float [[X_I0]], float [[Y_I0]], float [[Z_I0]])111; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1112; CHECK-NEXT:    [[Y_I1:%.*]] = extractelement <2 x float> [[Y]], i64 1113; CHECK-NEXT:    [[Z_I1:%.*]] = extractelement <2 x float> [[Z]], i64 1114; CHECK-NEXT:    [[FMA_I1:%.*]] = call float @llvm.fma.f32(float [[X_I1]], float [[Y_I1]], float [[Z_I1]])115; CHECK-NEXT:    [[FMA_UPTO0:%.*]] = insertelement <2 x float> poison, float [[FMA_I0]], i64 0116; CHECK-NEXT:    [[FMA:%.*]] = insertelement <2 x float> [[FMA_UPTO0]], float [[FMA_I1]], i64 1117; CHECK-NEXT:    ret <2 x float> [[FMA]]118;119  %fma = call <2 x float> @llvm.fma.v2f32(<2 x float> %x, <2 x float> %y, <2 x float> %z)120  ret <2 x float> %fma121}122 123define <2 x i32> @scalarize_bswap_v2i32(<2 x i32> %x) #0 {124; CHECK-LABEL: @scalarize_bswap_v2i32(125; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x i32> [[X:%.*]], i64 0126; CHECK-NEXT:    [[BSWAP_I0:%.*]] = call i32 @llvm.bswap.i32(i32 [[X_I0]])127; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x i32> [[X]], i64 1128; CHECK-NEXT:    [[BSWAP_I1:%.*]] = call i32 @llvm.bswap.i32(i32 [[X_I1]])129; CHECK-NEXT:    [[BSWAP_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[BSWAP_I0]], i64 0130; CHECK-NEXT:    [[BSWAP:%.*]] = insertelement <2 x i32> [[BSWAP_UPTO0]], i32 [[BSWAP_I1]], i64 1131; CHECK-NEXT:    ret <2 x i32> [[BSWAP]]132;133  %bswap = call <2 x i32> @llvm.bswap.v2i32(<2 x i32> %x)134  ret <2 x i32> %bswap135}136 137define <2 x i32> @scalarize_ctlz_v2i32(<2 x i32> %x) #0 {138; CHECK-LABEL: @scalarize_ctlz_v2i32(139; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x i32> [[X:%.*]], i64 0140; CHECK-NEXT:    [[CTLZ_I0:%.*]] = call i32 @llvm.ctlz.i32(i32 [[X_I0]], i1 true)141; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x i32> [[X]], i64 1142; CHECK-NEXT:    [[CTLZ_I1:%.*]] = call i32 @llvm.ctlz.i32(i32 [[X_I1]], i1 true)143; CHECK-NEXT:    [[CTLZ_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[CTLZ_I0]], i64 0144; CHECK-NEXT:    [[CTLZ:%.*]] = insertelement <2 x i32> [[CTLZ_UPTO0]], i32 [[CTLZ_I1]], i64 1145; CHECK-NEXT:    ret <2 x i32> [[CTLZ]]146;147  %ctlz = call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %x, i1 true)148  ret <2 x i32> %ctlz149}150 151define <2 x float> @scalarize_powi_v2f32(<2 x float> %x, i32 %y) #0 {152; CHECK-LABEL: @scalarize_powi_v2f32(153; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0154; CHECK-NEXT:    [[POWI_I0:%.*]] = call float @llvm.powi.f32.i32(float [[X_I0]], i32 [[Y:%.*]])155; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1156; CHECK-NEXT:    [[POWI_I1:%.*]] = call float @llvm.powi.f32.i32(float [[X_I1]], i32 [[Y]])157; CHECK-NEXT:    [[POWI_UPTO0:%.*]] = insertelement <2 x float> poison, float [[POWI_I0]], i64 0158; CHECK-NEXT:    [[POWI:%.*]] = insertelement <2 x float> [[POWI_UPTO0]], float [[POWI_I1]], i64 1159; CHECK-NEXT:    ret <2 x float> [[POWI]]160;161  %powi = call <2 x float> @llvm.powi.v2f32.i32(<2 x float> %x, i32 %y)162  ret <2 x float> %powi163}164 165define <2 x float> @scalarize_ldexp_v2f32(<2 x float> %x, <2 x i32> %y) #0 {166; CHECK-LABEL: @scalarize_ldexp_v2f32(167; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0168; CHECK-NEXT:    [[Y:%.*]] = extractelement <2 x i32> [[Y1:%.*]], i64 0169; CHECK-NEXT:    [[POWI_I0:%.*]] = call float @llvm.ldexp.f32.i32(float [[X_I0]], i32 [[Y]])170; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1171; CHECK-NEXT:    [[Y_I1:%.*]] = extractelement <2 x i32> [[Y1]], i64 1172; CHECK-NEXT:    [[POWI_I1:%.*]] = call float @llvm.ldexp.f32.i32(float [[X_I1]], i32 [[Y_I1]])173; CHECK-NEXT:    [[POWI_UPTO0:%.*]] = insertelement <2 x float> poison, float [[POWI_I0]], i64 0174; CHECK-NEXT:    [[POWI:%.*]] = insertelement <2 x float> [[POWI_UPTO0]], float [[POWI_I1]], i64 1175; CHECK-NEXT:    ret <2 x float> [[POWI]]176;177  %powi = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> %y)178  ret <2 x float> %powi179}180 181define <2 x i32> @scalarize_smul_fix_sat_v2i32(<2 x i32> %x) #0 {182; CHECK-LABEL: @scalarize_smul_fix_sat_v2i32(183; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x i32> [[X:%.*]], i64 0184; CHECK-NEXT:    [[SMULFIXSAT_I0:%.*]] = call i32 @llvm.smul.fix.sat.i32(i32 [[X_I0]], i32 5, i32 31)185; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x i32> [[X]], i64 1186; CHECK-NEXT:    [[SMULFIXSAT_I1:%.*]] = call i32 @llvm.smul.fix.sat.i32(i32 [[X_I1]], i32 19, i32 31)187; CHECK-NEXT:    [[SMULFIXSAT_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[SMULFIXSAT_I0]], i64 0188; CHECK-NEXT:    [[SMULFIXSAT:%.*]] = insertelement <2 x i32> [[SMULFIXSAT_UPTO0]], i32 [[SMULFIXSAT_I1]], i64 1189; CHECK-NEXT:    ret <2 x i32> [[SMULFIXSAT]]190;191  %smulfixsat = call <2 x i32> @llvm.smul.fix.sat.v2i32(<2 x i32> %x, <2 x i32> <i32 5, i32 19>, i32 31)192  ret <2 x i32> %smulfixsat193}194 195define <2 x i32> @scalarize_umul_fix_sat_v2i32(<2 x i32> %x) #0 {196; CHECK-LABEL: @scalarize_umul_fix_sat_v2i32(197; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x i32> [[X:%.*]], i64 0198; CHECK-NEXT:    [[UMULFIXSAT_I0:%.*]] = call i32 @llvm.umul.fix.sat.i32(i32 [[X_I0]], i32 5, i32 31)199; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x i32> [[X]], i64 1200; CHECK-NEXT:    [[UMULFIXSAT_I1:%.*]] = call i32 @llvm.umul.fix.sat.i32(i32 [[X_I1]], i32 19, i32 31)201; CHECK-NEXT:    [[UMULFIXSAT_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[UMULFIXSAT_I0]], i64 0202; CHECK-NEXT:    [[UMULFIXSAT:%.*]] = insertelement <2 x i32> [[UMULFIXSAT_UPTO0]], i32 [[UMULFIXSAT_I1]], i64 1203; CHECK-NEXT:    ret <2 x i32> [[UMULFIXSAT]]204;205  %umulfixsat = call <2 x i32> @llvm.umul.fix.sat.v2i32(<2 x i32> %x, <2 x i32> <i32 5, i32 19>, i32 31)206  ret <2 x i32> %umulfixsat207}208 209define <2 x i32> @scalarize_fptosi_sat(<2 x float> %x) #0 {210; CHECK-LABEL: @scalarize_fptosi_sat(211; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0212; CHECK-NEXT:    [[SAT_I0:%.*]] = call i32 @llvm.fptosi.sat.i32.f32(float [[X_I0]])213; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1214; CHECK-NEXT:    [[SAT_I1:%.*]] = call i32 @llvm.fptosi.sat.i32.f32(float [[X_I1]])215; CHECK-NEXT:    [[SAT_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[SAT_I0]], i64 0216; CHECK-NEXT:    [[SAT:%.*]] = insertelement <2 x i32> [[SAT_UPTO0]], i32 [[SAT_I1]], i64 1217; CHECK-NEXT:    ret <2 x i32> [[SAT]]218;219  %sat = call <2 x i32> @llvm.fptosi.sat.v2i32.v2f32(<2 x float> %x)220  ret <2 x i32> %sat221}222 223define <2 x i32> @scalarize_fptoui_sat(<2 x float> %x) #0 {224; CHECK-LABEL: @scalarize_fptoui_sat(225; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0226; CHECK-NEXT:    [[SAT_I0:%.*]] = call i32 @llvm.fptoui.sat.i32.f32(float [[X_I0]])227; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1228; CHECK-NEXT:    [[SAT_I1:%.*]] = call i32 @llvm.fptoui.sat.i32.f32(float [[X_I1]])229; CHECK-NEXT:    [[SAT_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[SAT_I0]], i64 0230; CHECK-NEXT:    [[SAT:%.*]] = insertelement <2 x i32> [[SAT_UPTO0]], i32 [[SAT_I1]], i64 1231; CHECK-NEXT:    ret <2 x i32> [[SAT]]232;233  %sat = call <2 x i32> @llvm.fptoui.sat.v2i32.v2f32(<2 x float> %x)234  ret <2 x i32> %sat235}236 237define <2 x i32> @scalarize_lrint(<2 x float> %x) #0 {238; CHECK-LABEL: @scalarize_lrint(239; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0240; CHECK-NEXT:    [[RND_I0:%.*]] = call i32 @llvm.lrint.i32.f32(float [[X_I0]])241; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1242; CHECK-NEXT:    [[RND_I1:%.*]] = call i32 @llvm.lrint.i32.f32(float [[X_I1]])243; CHECK-NEXT:    [[RND_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[RND_I0]], i64 0244; CHECK-NEXT:    [[RND:%.*]] = insertelement <2 x i32> [[RND_UPTO0]], i32 [[RND_I1]], i64 1245; CHECK-NEXT:    ret <2 x i32> [[RND]]246;247  %rnd = call <2 x i32> @llvm.lrint.v2i32.v2f32(<2 x float> %x)248  ret <2 x i32> %rnd249}250 251define <2 x i32> @scalarize_llrint(<2 x float> %x) #0 {252; CHECK-LABEL: @scalarize_llrint(253; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0254; CHECK-NEXT:    [[RND_I0:%.*]] = call i32 @llvm.llrint.i32.f32(float [[X_I0]])255; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1256; CHECK-NEXT:    [[RND_I1:%.*]] = call i32 @llvm.llrint.i32.f32(float [[X_I1]])257; CHECK-NEXT:    [[RND_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[RND_I0]], i64 0258; CHECK-NEXT:    [[RND:%.*]] = insertelement <2 x i32> [[RND_UPTO0]], i32 [[RND_I1]], i64 1259; CHECK-NEXT:    ret <2 x i32> [[RND]]260;261  %rnd = call <2 x i32> @llvm.llrint.v2i32.v2f32(<2 x float> %x)262  ret <2 x i32> %rnd263}264 265define <2 x i32> @scalarize_lround(<2 x float> %x) #0 {266; CHECK-LABEL: @scalarize_lround(267; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0268; CHECK-NEXT:    [[RND_I0:%.*]] = call i32 @llvm.lround.i32.f32(float [[X_I0]])269; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1270; CHECK-NEXT:    [[RND_I1:%.*]] = call i32 @llvm.lround.i32.f32(float [[X_I1]])271; CHECK-NEXT:    [[RND_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[RND_I0]], i64 0272; CHECK-NEXT:    [[RND:%.*]] = insertelement <2 x i32> [[RND_UPTO0]], i32 [[RND_I1]], i64 1273; CHECK-NEXT:    ret <2 x i32> [[RND]]274;275  %rnd = call <2 x i32> @llvm.lround.v2i32.v2f32(<2 x float> %x)276  ret <2 x i32> %rnd277}278 279define <2 x i32> @scalarize_llround(<2 x float> %x) #0 {280; CHECK-LABEL: @scalarize_llround(281; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0282; CHECK-NEXT:    [[RND_I0:%.*]] = call i32 @llvm.llround.i32.f32(float [[X_I0]])283; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1284; CHECK-NEXT:    [[RND_I1:%.*]] = call i32 @llvm.llround.i32.f32(float [[X_I1]])285; CHECK-NEXT:    [[RND_UPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[RND_I0]], i64 0286; CHECK-NEXT:    [[RND:%.*]] = insertelement <2 x i32> [[RND_UPTO0]], i32 [[RND_I1]], i64 1287; CHECK-NEXT:    ret <2 x i32> [[RND]]288;289  %rnd = call <2 x i32> @llvm.llround.v2i32.v2f32(<2 x float> %x)290  ret <2 x i32> %rnd291}292 293define <2 x i1> @scalarize_is_fpclass(<2 x float> %x) #0 {294; CHECK-LABEL: @scalarize_is_fpclass(295; CHECK-NEXT:    [[X_I0:%.*]] = extractelement <2 x float> [[X:%.*]], i64 0296; CHECK-NEXT:    [[ISFPCLASS_I0:%.*]] = call i1 @llvm.is.fpclass.f32(float [[X_I0]], i32 123)297; CHECK-NEXT:    [[X_I1:%.*]] = extractelement <2 x float> [[X]], i64 1298; CHECK-NEXT:    [[ISFPCLASS_I1:%.*]] = call i1 @llvm.is.fpclass.f32(float [[X_I1]], i32 123)299; CHECK-NEXT:    [[ISFPCLASS_UPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[ISFPCLASS_I0]], i64 0300; CHECK-NEXT:    [[ISFPCLASS:%.*]] = insertelement <2 x i1> [[ISFPCLASS_UPTO0]], i1 [[ISFPCLASS_I1]], i64 1301; CHECK-NEXT:    ret <2 x i1> [[ISFPCLASS]]302;303  %isfpclass = call <2 x i1> @llvm.is.fpclass(<2 x float> %x, i32 123)304  ret <2 x i1> %isfpclass305}306