320 lines · plain
1; RUN: opt -S -dxil-intrinsic-expansion -scalarizer -dxil-op-lower -mtriple=dxil-pc-shadermodel6.9-library %s | FileCheck %s --check-prefixes=CHECK,SM69CHECK2; RUN: opt -S -dxil-intrinsic-expansion -scalarizer -dxil-op-lower -mtriple=dxil-pc-shadermodel6.8-library %s | FileCheck %s --check-prefixes=CHECK,SMOLDCHECK3 4 5define noundef i1 @isnegzero(float noundef %a) {6; CHECK-LABEL: define noundef i1 @isnegzero(7; CHECK-SAME: float noundef [[A:%.*]]) {8; CHECK-NEXT: [[ENTRY:.*:]]9; CHECK-NEXT: [[TMP0:%.*]] = bitcast float [[A]] to i3210; CHECK-NEXT: [[IS_FPCLASS_NEGZERO:%.*]] = icmp eq i32 [[TMP0]], -214748364811; CHECK-NEXT: ret i1 [[IS_FPCLASS_NEGZERO]]12;13entry:14 %0 = call i1 @llvm.is.fpclass.f32(float %a, i32 32)15 ret i1 %016}17 18define noundef <2 x i1> @isnegzerov2(<2 x float> noundef %a) {19; CHECK-LABEL: define noundef <2 x i1> @isnegzerov2(20; CHECK-SAME: <2 x float> noundef [[A:%.*]]) {21; CHECK-NEXT: [[ENTRY:.*:]]22; CHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x float> [[A]], i64 023; CHECK-NEXT: [[DOTI0:%.*]] = bitcast float [[A_I0]] to i3224; CHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x float> [[A]], i64 125; CHECK-NEXT: [[DOTI1:%.*]] = bitcast float [[A_I1]] to i3226; CHECK-NEXT: [[IS_FPCLASS_NEGZERO_I0:%.*]] = icmp eq i32 [[DOTI0]], -214748364827; CHECK-NEXT: [[IS_FPCLASS_NEGZERO_I1:%.*]] = icmp eq i32 [[DOTI1]], -214748364828; CHECK-NEXT: [[IS_FPCLASS_NEGZERO_UPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[IS_FPCLASS_NEGZERO_I0]], i64 029; CHECK-NEXT: [[IS_FPCLASS_NEGZERO:%.*]] = insertelement <2 x i1> [[IS_FPCLASS_NEGZERO_UPTO0]], i1 [[IS_FPCLASS_NEGZERO_I1]], i64 130; CHECK-NEXT: ret <2 x i1> [[IS_FPCLASS_NEGZERO]]31;32entry:33 %0 = call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %a, i32 32)34 ret <2 x i1> %035}36 37define noundef i1 @isnan(float noundef %a) {38; CHECK-LABEL: define noundef i1 @isnan(39; CHECK-SAME: float noundef [[A:%.*]]) {40; CHECK-NEXT: [[ENTRY:.*:]]41; CHECK-NEXT: [[TMP0:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 8, float [[A]]) #[[ATTR0:[0-9]+]]42; CHECK-NEXT: ret i1 [[TMP0]]43;44entry:45 %0 = call i1 @llvm.is.fpclass.f32(float %a, i32 3)46 ret i1 %047}48 49define noundef i1 @isnanh(half noundef %a) {50; CHECK-LABEL: define noundef i1 @isnanh(51; CHECK-SAME: half noundef [[A:%.*]]) {52; CHECK-NEXT: [[ENTRY:.*:]]53; SM69CHECK-NEXT: [[TMP0:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 8, half [[A]]) #[[ATTR0:[0-9]+]]54; SMOLDCHECK-NEXT: [[BITCAST:%.*]] = bitcast half [[A]] to i1655; SMOLDCHECK-NEXT: [[AND:%.*]] = and i16 [[BITCAST]], 3174456; SMOLDCHECK-NEXT: [[CMPHIGH:%.*]] = icmp eq i16 [[AND]], 3174457; SMOLDCHECK-NEXT: [[ANDLOW:%.*]] = and i16 [[BITCAST]], 102358; SMOLDCHECK-NEXT: [[CMPZERO:%.*]] = icmp ne i16 [[ANDLOW]], 059; SMOLDCHECK-NEXT: [[ANDLOW:%.*]] = and i1 [[CMPHIGH]], [[CMPZERO]]60; SMOLDCHECK-NEXT: ret i1 [[ANDLOW]]61; SM69CHECK-NEXT: ret i1 [[TMP0]]62;63entry:64 %0 = call i1 @llvm.is.fpclass.f16(half %a, i32 3)65 ret i1 %066}67 68define noundef <2 x i1> @isnanv2(<2 x float> noundef %a) {69; CHECK-LABEL: define noundef <2 x i1> @isnanv2(70; CHECK-SAME: <2 x float> noundef [[A:%.*]]) {71; CHECK-NEXT: [[ENTRY:.*:]]72; CHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x float> [[A]], i64 073; CHECK-NEXT: [[DOTI02:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 8, float [[A_I0]]) #[[ATTR0]]74; CHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x float> [[A]], i64 175; CHECK-NEXT: [[DOTI11:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 8, float [[A_I1]]) #[[ATTR0]]76; CHECK-NEXT: [[DOTUPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI02]], i64 077; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO0]], i1 [[DOTI11]], i64 178; CHECK-NEXT: ret <2 x i1> [[TMP0]]79;80entry:81 %0 = call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %a, i32 3)82 ret <2 x i1> %083}84 85define noundef <2 x i1> @isnanhv2(<2 x half> noundef %a) {86; CHECK-LABEL: define noundef <2 x i1> @isnanhv2(87; CHECK-SAME: <2 x half> noundef [[A:%.*]]) {88; CHECK-NEXT: [[ENTRY:.*:]]89; CHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x half> [[A]], i64 090; SM69CHECK-NEXT: [[DOTI02:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 8, half [[A_I0]]) #[[ATTR0:[0-9]+]]91; SM69CHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 192; SM69CHECK-NEXT: [[DOTI11:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 8, half [[A_I1]]) #[[ATTR0]]93; SM69CHECK-NEXT: [[DOTUPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI02]], i64 094; SM69CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO0]], i1 [[DOTI11]], i64 195; SM69CHECK-NEXT: ret <2 x i1> [[TMP0]]96;97; SMOLDCHECK-NEXT: [[DOTI0:%.*]] = bitcast half [[A_I0]] to i1698; SMOLDCHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 199; SMOLDCHECK-NEXT: [[DOTI1:%.*]] = bitcast half [[A_I1]] to i16100; SMOLDCHECK-NEXT: [[DOTI01:%.*]] = and i16 [[DOTI0]], 31744101; SMOLDCHECK-NEXT: [[DOTI12:%.*]] = and i16 [[DOTI1]], 31744102; SMOLDCHECK-NEXT: [[DOTI03:%.*]] = icmp eq i16 [[DOTI01]], 31744103; SMOLDCHECK-NEXT: [[DOTI14:%.*]] = icmp eq i16 [[DOTI12]], 31744104; SMOLDCHECK-NEXT: [[DOTI05:%.*]] = and i16 [[DOTI0]], 1023105; SMOLDCHECK-NEXT: [[DOTI16:%.*]] = and i16 [[DOTI1]], 1023106; SMOLDCHECK-NEXT: [[DOTI07:%.*]] = icmp ne i16 [[DOTI05]], 0107; SMOLDCHECK-NEXT: [[DOTI18:%.*]] = icmp ne i16 [[DOTI16]], 0108; SMOLDCHECK-NEXT: [[DOTI09:%.*]] = and i1 [[DOTI03]], [[DOTI07]]109; SMOLDCHECK-NEXT: [[DOTI110:%.*]] = and i1 [[DOTI14]], [[DOTI18]]110; SMOLDCHECK-NEXT: [[DOTUPTO015:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI09]], i64 0111; SMOLDCHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO015]], i1 [[DOTI110]], i64 1112; SMOLDCHECK-NEXT: ret <2 x i1> [[TMP0]]113;114entry:115 %0 = call <2 x i1> @llvm.is.fpclass.v2f16(<2 x half> %a, i32 3)116 ret <2 x i1> %0117}118 119define noundef i1 @isinf(float noundef %a) {120; CHECK-LABEL: define noundef i1 @isinf(121; CHECK-SAME: float noundef [[A:%.*]]) {122; CHECK-NEXT: [[ENTRY:.*:]]123; CHECK-NEXT: [[TMP0:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 9, float [[A]]) #[[ATTR0]]124; CHECK-NEXT: ret i1 [[TMP0]]125;126entry:127 %0 = call i1 @llvm.is.fpclass.f32(float %a, i32 516)128 ret i1 %0129}130 131define noundef i1 @isinfh(half noundef %a) {132; CHECK-LABEL: define noundef i1 @isinfh(133; CHECK-SAME: half noundef [[A:%.*]]) {134; CHECK-NEXT: [[ENTRY:.*:]]135; SM69CHECK-NEXT: [[ISINF:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 9, half [[A]]) #[[ATTR0]]136; SMOLDCHECK-NEXT: [[BITCAST:%.*]] = bitcast half [[A]] to i16137; SMOLDCHECK-NEXT: [[CMPHIGH:%.*]] = icmp eq i16 [[BITCAST]], 31744138; SMOLDCHECK-NEXT: [[CMPLOW:%.*]] = icmp eq i16 [[BITCAST]], -1024139; SMOLDCHECK-NEXT: [[OR:%.*]] = or i1 [[CMPHIGH]], [[CMPLOW]]140; SMOLDCHECK-NEXT: ret i1 [[OR]]141; SM69CHECK-NEXT: ret i1 [[ISINF]]142;143entry:144 %0 = call i1 @llvm.is.fpclass.f16(half %a, i32 516)145 ret i1 %0146}147 148define noundef <2 x i1> @isinfv2(<2 x float> noundef %a) {149; CHECK-LABEL: define noundef <2 x i1> @isinfv2(150; CHECK-SAME: <2 x float> noundef [[A:%.*]]) {151; CHECK-NEXT: [[ENTRY:.*:]]152; CHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x float> [[A]], i64 0153; CHECK-NEXT: [[DOTI02:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 9, float [[A_I0]]) #[[ATTR0]]154; CHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x float> [[A]], i64 1155; CHECK-NEXT: [[DOTI11:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 9, float [[A_I1]]) #[[ATTR0]]156; CHECK-NEXT: [[DOTUPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI02]], i64 0157; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO0]], i1 [[DOTI11]], i64 1158; CHECK-NEXT: ret <2 x i1> [[TMP0]]159;160entry:161 %0 = call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %a, i32 516)162 ret <2 x i1> %0163}164 165define noundef i1 @isfinite(float noundef %a) {166; CHECK-LABEL: define noundef i1 @isfinite(167; CHECK-SAME: float noundef [[A:%.*]]) {168; CHECK-NEXT: [[ENTRY:.*:]]169; CHECK-NEXT: [[TMP0:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 10, float [[A]]) #[[ATTR0]]170; CHECK-NEXT: ret i1 [[TMP0]]171;172entry:173 %0 = call i1 @llvm.is.fpclass.f32(float %a, i32 504)174 ret i1 %0175}176 177define noundef i1 @isfiniteh(half noundef %a) {178; CHECK-LABEL: define noundef i1 @isfiniteh(179; CHECK-SAME: half noundef [[A:%.*]]) {180; CHECK-NEXT: [[ENTRY:.*:]]181; SM69CHECK-NEXT: [[TMP0:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 10, half [[A]]) #[[ATTR0]]182; SMOLDCHECK-NEXT: [[BITCAST:%.*]] = bitcast half [[A]] to i16183; SMOLDCHECK-NEXT: [[AND:%.*]] = and i16 [[BITCAST]], 31744184; SMOLDCHECK-NEXT: [[CMPHIGH:%.*]] = icmp ne i16 [[AND]], 31744185; SMOLDCHECK-NEXT: ret i1 [[CMPHIGH]]186; SM69CHECK-NEXT: ret i1 [[TMP0]]187;188entry:189 %0 = call i1 @llvm.is.fpclass.f16(half %a, i32 504)190 ret i1 %0191}192 193define noundef <2 x i1> @isfinitev2(<2 x float> noundef %a) {194; CHECK-LABEL: define noundef <2 x i1> @isfinitev2(195; CHECK-SAME: <2 x float> noundef [[A:%.*]]) {196; CHECK-NEXT: [[ENTRY:.*:]]197; CHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x float> [[A]], i64 0198; CHECK-NEXT: [[DOTI02:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 10, float [[A_I0]]) #[[ATTR0]]199; CHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x float> [[A]], i64 1200; CHECK-NEXT: [[DOTI11:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 10, float [[A_I1]]) #[[ATTR0]]201; CHECK-NEXT: [[DOTUPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI02]], i64 0202; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO0]], i1 [[DOTI11]], i64 1203; CHECK-NEXT: ret <2 x i1> [[TMP0]]204;205entry:206 %0 = call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %a, i32 504)207 ret <2 x i1> %0208}209 210define noundef <2 x i1> @isfinitehv2(<2 x half> noundef %a) {211; CHECK-LABEL: define noundef <2 x i1> @isfinitehv2(212; CHECK-SAME: <2 x half> noundef [[A:%.*]]) {213; CHECK-NEXT: [[ENTRY:.*:]]214; SM69CHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x half> [[A]], i64 0215; SM69CHECK-NEXT: [[DOTI02:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 10, half [[A_I0]]) #[[ATTR0:[0-9]+]]216; SM69CHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1217; SM69CHECK-NEXT: [[DOTI11:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 10, half [[A_I1]]) #[[ATTR0]]218; SM69CHECK-NEXT: [[DOTUPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI02]], i64 0219; SM69CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO0]], i1 [[DOTI11]], i64 1220; SM69CHECK-NEXT: ret <2 x i1> [[TMP0]]221;222; SMOLDCHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x half> [[A]], i64 0223; SMOLDCHECK-NEXT: [[DOTI0:%.*]] = bitcast half [[A_I0]] to i16224; SMOLDCHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1225; SMOLDCHECK-NEXT: [[DOTI1:%.*]] = bitcast half [[A_I1]] to i16226; SMOLDCHECK-NEXT: [[DOTI01:%.*]] = and i16 [[DOTI0]], 31744227; SMOLDCHECK-NEXT: [[DOTI12:%.*]] = and i16 [[DOTI1]], 31744228; SMOLDCHECK-NEXT: [[DOTI03:%.*]] = icmp ne i16 [[DOTI01]], 31744229; SMOLDCHECK-NEXT: [[DOTI14:%.*]] = icmp ne i16 [[DOTI12]], 31744230; SMOLDCHECK-NEXT: [[DOTUPTO06:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI03]], i64 0231; SMOLDCHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO06]], i1 [[DOTI14]], i64 1232; SMOLDCHECK-NEXT: ret <2 x i1> [[TMP0]]233;234entry:235 %0 = call <2 x i1> @llvm.is.fpclass.v2f16(<2 x half> %a, i32 504)236 ret <2 x i1> %0237}238 239define noundef i1 @isnormal(float noundef %a) {240; CHECK-LABEL: define noundef i1 @isnormal(241; CHECK-SAME: float noundef [[A:%.*]]) {242; CHECK-NEXT: [[ENTRY:.*:]]243; CHECK-NEXT: [[TMP0:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 11, float [[A]]) #[[ATTR0]]244; CHECK-NEXT: ret i1 [[TMP0]]245;246entry:247 %0 = call i1 @llvm.is.fpclass.f32(float %a, i32 264)248 ret i1 %0249}250 251define noundef i1 @isnormalh(half noundef %a) {252; CHECK-LABEL: define noundef i1 @isnormalh(253; CHECK-SAME: half noundef [[A:%.*]]) {254; CHECK-NEXT: [[ENTRY:.*:]]255; SM69CHECK-NEXT: [[TMP0:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 11, half [[A]]) #[[ATTR0]]256; SMOLDCHECK-NEXT: [[BITCAST:%.*]] = bitcast half [[A]] to i16257; SMOLDCHECK-NEXT: [[AND:%.*]] = and i16 [[BITCAST]], 31744258; SMOLDCHECK-NEXT: [[CMPZERO:%.*]] = icmp ne i16 [[AND]], 0259; SMOLDCHECK-NEXT: [[CMPHIGH:%.*]] = icmp ne i16 [[AND]], 31744260; SMOLDCHECK-NEXT: [[ANDCMP:%.*]] = and i1 [[CMPZERO]], [[CMPHIGH]]261; SMOLDCHECK-NEXT: ret i1 [[ANDCMP]]262; SM69CHECK-NEXT: ret i1 [[TMP0]]263;264entry:265 %0 = call i1 @llvm.is.fpclass.f16(half %a, i32 264)266 ret i1 %0267}268 269define noundef <2 x i1> @isnormalv2(<2 x float> noundef %a) {270; CHECK-LABEL: define noundef <2 x i1> @isnormalv2(271; CHECK-SAME: <2 x float> noundef [[A:%.*]]) {272; CHECK-NEXT: [[ENTRY:.*:]]273; CHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x float> [[A]], i64 0274; CHECK-NEXT: [[DOTI02:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 11, float [[A_I0]]) #[[ATTR0]]275; CHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x float> [[A]], i64 1276; CHECK-NEXT: [[DOTI11:%.*]] = call i1 @dx.op.isSpecialFloat.f32(i32 11, float [[A_I1]]) #[[ATTR0]]277; CHECK-NEXT: [[DOTUPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI02]], i64 0278; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO0]], i1 [[DOTI11]], i64 1279; CHECK-NEXT: ret <2 x i1> [[TMP0]]280;281entry:282 %0 = call <2 x i1> @llvm.is.fpclass.v2f32(<2 x float> %a, i32 264)283 ret <2 x i1> %0284}285 286define noundef <2 x i1> @isnormalhv2(<2 x half> noundef %a) {287; CHECK-LABEL: define noundef <2 x i1> @isnormalhv2(288; CHECK-SAME: <2 x half> noundef [[A:%.*]]) {289; CHECK-NEXT: [[ENTRY:.*:]]290; CHECK-NEXT: [[A_I0:%.*]] = extractelement <2 x half> [[A]], i64 0291; SM69CHECK-NEXT: [[DOTI02:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 11, half [[A_I0]]) #[[ATTR0:[0-9]+]]292; SM69CHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1293; SM69CHECK-NEXT: [[DOTI11:%.*]] = call i1 @dx.op.isSpecialFloat.f16(i32 11, half [[A_I1]]) #[[ATTR0]]294; SM69CHECK-NEXT: [[DOTUPTO0:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI02]], i64 0295; SM69CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO0]], i1 [[DOTI11]], i64 1296; SM69CHECK-NEXT: ret <2 x i1> [[TMP0]]297;298; SMOLDCHECK-NEXT: [[DOTI0:%.*]] = bitcast half [[A_I0]] to i16299; SMOLDCHECK-NEXT: [[A_I1:%.*]] = extractelement <2 x half> [[A]], i64 1300; SMOLDCHECK-NEXT: [[DOTI1:%.*]] = bitcast half [[A_I1]] to i16301; SMOLDCHECK-NEXT: [[DOTI01:%.*]] = and i16 [[DOTI0]], 31744302; SMOLDCHECK-NEXT: [[DOTI12:%.*]] = and i16 [[DOTI1]], 31744303; SMOLDCHECK-NEXT: [[DOTI03:%.*]] = icmp ne i16 [[DOTI01]], 0304; SMOLDCHECK-NEXT: [[DOTI14:%.*]] = icmp ne i16 [[DOTI12]], 0305; SMOLDCHECK-NEXT: [[DOTI05:%.*]] = icmp ne i16 [[DOTI01]], 31744306; SMOLDCHECK-NEXT: [[DOTI16:%.*]] = icmp ne i16 [[DOTI12]], 31744307; SMOLDCHECK-NEXT: [[DOTI07:%.*]] = and i1 [[DOTI03]], [[DOTI05]]308; SMOLDCHECK-NEXT: [[DOTI18:%.*]] = and i1 [[DOTI14]], [[DOTI16]]309; SMOLDCHECK-NEXT: [[DOTUPTO012:%.*]] = insertelement <2 x i1> poison, i1 [[DOTI07]], i64 0310; SMOLDCHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i1> [[DOTUPTO012]], i1 [[DOTI18]], i64 1311; SMOLDCHECK-NEXT: ret <2 x i1> [[TMP0]]312;313entry:314 %0 = call <2 x i1> @llvm.is.fpclass.v2f16(<2 x half> %a, i32 264)315 ret <2 x i1> %0316}317 318declare i1 @llvm.is.fpclass.f32(float, i32 immarg)319declare <2 x i1> @llvm.is.fpclass.v2f32(<2 x float>, i32 immarg)320