brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.1 KiB · 3cab09c Raw
480 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=instcombine < %s | FileCheck %s3 4define i32 @ctlz_true_freeze(i32 %arg) {5; CHECK-LABEL: @ctlz_true_freeze(6; CHECK-NEXT:    [[CALL:%.*]] = call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 [[ARG:%.*]], i1 true)7; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[CALL]]8; CHECK-NEXT:    ret i32 [[FREEZE]]9;10  %call = call i32 @llvm.ctlz.i32(i32 %arg, i1 true)11  %freeze = freeze i32 %call12  ret i32 %freeze13}14 15define i32 @ctlz_false_freeze(i32 %arg) {16; CHECK-LABEL: @ctlz_false_freeze(17; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze i32 [[ARG:%.*]]18; CHECK-NEXT:    [[CALL:%.*]] = call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 [[ARG_FR]], i1 false)19; CHECK-NEXT:    ret i32 [[CALL]]20;21  %call = call i32 @llvm.ctlz.i32(i32 %arg, i1 false)22  %freeze = freeze i32 %call23  ret i32 %freeze24}25 26define i32 @ctlz_true_noundef_freeze(i32 %arg) {27; CHECK-LABEL: @ctlz_true_noundef_freeze(28; CHECK-NEXT:    [[CALL:%.*]] = call noundef range(i32 0, 33) i32 @llvm.ctlz.i32(i32 [[ARG:%.*]], i1 true)29; CHECK-NEXT:    ret i32 [[CALL]]30;31  %call = call noundef i32 @llvm.ctlz.i32(i32 %arg, i1 true)32  %freeze = freeze i32 %call33  ret i32 %freeze34}35 36define i32 @cttz_true_freeze(i32 %arg) {37; CHECK-LABEL: @cttz_true_freeze(38; CHECK-NEXT:    [[CALL:%.*]] = call range(i32 0, 33) i32 @llvm.cttz.i32(i32 [[ARG:%.*]], i1 true)39; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[CALL]]40; CHECK-NEXT:    ret i32 [[FREEZE]]41;42  %call = call i32 @llvm.cttz.i32(i32 %arg, i1 true)43  %freeze = freeze i32 %call44  ret i32 %freeze45}46 47define i32 @cttz_true_noundef_freeze(i32 %arg) {48; CHECK-LABEL: @cttz_true_noundef_freeze(49; CHECK-NEXT:    [[CALL:%.*]] = call noundef range(i32 0, 33) i32 @llvm.cttz.i32(i32 [[ARG:%.*]], i1 true)50; CHECK-NEXT:    ret i32 [[CALL]]51;52  %call = call noundef i32 @llvm.cttz.i32(i32 %arg, i1 true)53  %freeze = freeze i32 %call54  ret i32 %freeze55}56 57define i32 @freeze_cttz_true(i32 %arg) {58; CHECK-LABEL: @freeze_cttz_true(59; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[ARG:%.*]]60; CHECK-NEXT:    [[CALL:%.*]] = call range(i32 0, 33) i32 @llvm.cttz.i32(i32 [[FREEZE]], i1 true)61; CHECK-NEXT:    ret i32 [[CALL]]62;63  %freeze = freeze i32 %arg64  %call = call i32 @llvm.cttz.i32(i32 %freeze, i1 true)65  ret i32 %call66}67 68define i32 @cttz_false_freeze(i32 %arg) {69; CHECK-LABEL: @cttz_false_freeze(70; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze i32 [[ARG:%.*]]71; CHECK-NEXT:    [[CALL:%.*]] = call range(i32 0, 33) i32 @llvm.cttz.i32(i32 [[ARG_FR]], i1 false)72; CHECK-NEXT:    ret i32 [[CALL]]73;74  %call = call i32 @llvm.cttz.i32(i32 %arg, i1 false)75  %freeze = freeze i32 %call76  ret i32 %freeze77}78 79define i32 @freeze_cttz_false(i32 %arg) {80; CHECK-LABEL: @freeze_cttz_false(81; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[ARG:%.*]]82; CHECK-NEXT:    [[CALL:%.*]] = call range(i32 0, 33) i32 @llvm.cttz.i32(i32 [[FREEZE]], i1 false)83; CHECK-NEXT:    ret i32 [[CALL]]84;85  %freeze = freeze i32 %arg86  %call = call i32 @llvm.cttz.i32(i32 %freeze, i1 false)87  ret i32 %call88}89 90define i32 @abs_true_i32(i32 %arg) {91; CHECK-LABEL: @abs_true_i32(92; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.abs.i32(i32 [[ARG:%.*]], i1 true)93; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[CALL]]94; CHECK-NEXT:    ret i32 [[FREEZE]]95;96  %call = call i32 @llvm.abs.i32(i32 %arg, i1 true)97  %freeze = freeze i32 %call98  ret i32 %freeze99}100 101define i32 @abs_false_i32(i32 %arg) {102; CHECK-LABEL: @abs_false_i32(103; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze i32 [[ARG:%.*]]104; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.abs.i32(i32 [[ARG_FR]], i1 false)105; CHECK-NEXT:    ret i32 [[CALL]]106;107  %call = call i32 @llvm.abs.i32(i32 %arg, i1 false)108  %freeze = freeze i32 %call109  ret i32 %freeze110}111 112define i32 @noundef_abs_true_i32(i32 %arg) {113; CHECK-LABEL: @noundef_abs_true_i32(114; CHECK-NEXT:    [[CALL:%.*]] = call noundef i32 @llvm.abs.i32(i32 [[ARG:%.*]], i1 true)115; CHECK-NEXT:    ret i32 [[CALL]]116;117  %call = call noundef i32 @llvm.abs.i32(i32 %arg, i1 true)118  %freeze = freeze i32 %call119  ret i32 %freeze120}121 122define i32 @bswap_i32(i32 %arg) {123; CHECK-LABEL: @bswap_i32(124; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze i32 [[ARG:%.*]]125; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.bswap.i32(i32 [[ARG_FR]])126; CHECK-NEXT:    ret i32 [[CALL]]127;128  %call = call i32 @llvm.bswap.i32(i32 %arg)129  %freeze = freeze i32 %call130  ret i32 %freeze131}132 133define i32 @bitreverse_i32(i32 %arg) {134; CHECK-LABEL: @bitreverse_i32(135; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze i32 [[ARG:%.*]]136; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.bitreverse.i32(i32 [[ARG_FR]])137; CHECK-NEXT:    ret i32 [[CALL]]138;139  %call = call i32 @llvm.bitreverse.i32(i32 %arg)140  %freeze = freeze i32 %call141  ret i32 %freeze142}143 144define i32 @fshl_i32(i32 %arg0, i32 noundef %arg1, i32 noundef %arg2) {145; CHECK-LABEL: @fshl_i32(146; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]147; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.fshl.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]], i32 [[ARG2:%.*]])148; CHECK-NEXT:    ret i32 [[CALL]]149;150  %call = call i32 @llvm.fshl.i32(i32 %arg0, i32 %arg1, i32 %arg2)151  %freeze = freeze i32 %call152  ret i32 %freeze153}154 155define i32 @fshr_i32(i32 %arg0, i32 noundef %arg1, i32 noundef %arg2) {156; CHECK-LABEL: @fshr_i32(157; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]158; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.fshr.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]], i32 [[ARG2:%.*]])159; CHECK-NEXT:    ret i32 [[CALL]]160;161  %call = call i32 @llvm.fshr.i32(i32 %arg0, i32 %arg1, i32 %arg2)162  %freeze = freeze i32 %call163  ret i32 %freeze164}165 166define i32 @smax_i32(i32 %arg0, i32 noundef %arg1) {167; CHECK-LABEL: @smax_i32(168; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]169; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.smax.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]])170; CHECK-NEXT:    ret i32 [[CALL]]171;172  %call = call i32 @llvm.smax.i32(i32 %arg0, i32 %arg1)173  %freeze = freeze i32 %call174  ret i32 %freeze175}176 177define i32 @smin_i32(i32 %arg0, i32 noundef %arg1) {178; CHECK-LABEL: @smin_i32(179; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]180; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.smin.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]])181; CHECK-NEXT:    ret i32 [[CALL]]182;183  %call = call i32 @llvm.smin.i32(i32 %arg0, i32 %arg1)184  %freeze = freeze i32 %call185  ret i32 %freeze186}187 188define i32 @umax_i32(i32 %arg0, i32 noundef %arg1) {189; CHECK-LABEL: @umax_i32(190; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]191; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.umax.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]])192; CHECK-NEXT:    ret i32 [[CALL]]193;194  %call = call i32 @llvm.umax.i32(i32 %arg0, i32 %arg1)195  %freeze = freeze i32 %call196  ret i32 %freeze197}198 199define i32 @umin_i32(i32 %arg0, i32 noundef %arg1) {200; CHECK-LABEL: @umin_i32(201; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]202; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.umin.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]])203; CHECK-NEXT:    ret i32 [[CALL]]204;205  %call = call i32 @llvm.umin.i32(i32 %arg0, i32 %arg1)206  %freeze = freeze i32 %call207  ret i32 %freeze208}209 210define ptr @ptrmask_p0(ptr %arg0, i64 noundef %arg1) {211; CHECK-LABEL: @ptrmask_p0(212; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze ptr [[ARG0:%.*]]213; CHECK-NEXT:    [[CALL:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[ARG0_FR]], i64 [[ARG1:%.*]])214; CHECK-NEXT:    ret ptr [[CALL]]215;216  %call = call ptr @llvm.ptrmask.p0.i64(ptr %arg0, i64 %arg1)217  %freeze = freeze ptr %call218  ret ptr %freeze219}220 221define i32 @fptoui_sat(float %arg) {222; CHECK-LABEL: @fptoui_sat(223; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG:%.*]]224; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.fptoui.sat.i32.f32(float [[ARG_FR]])225; CHECK-NEXT:    ret i32 [[CALL]]226;227  %call = call i32 @llvm.fptoui.sat.i32.f32(float %arg)228  %freeze = freeze i32 %call229  ret i32 %freeze230}231 232define i32 @fptosi_sat(float %arg) {233; CHECK-LABEL: @fptosi_sat(234; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze float [[ARG:%.*]]235; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.fptosi.sat.i32.f32(float [[ARG_FR]])236; CHECK-NEXT:    ret i32 [[CALL]]237;238  %call = call i32 @llvm.fptosi.sat.i32.f32(float %arg)239  %freeze = freeze i32 %call240  ret i32 %freeze241}242 243define i32 @sadd_sat_i32(i32 %arg0, i32 noundef %arg1) {244; CHECK-LABEL: @sadd_sat_i32(245; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]246; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.sadd.sat.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]])247; CHECK-NEXT:    ret i32 [[CALL]]248;249  %call = call i32 @llvm.sadd.sat.i32(i32 %arg0, i32 %arg1)250  %freeze = freeze i32 %call251  ret i32 %freeze252}253 254define i32 @uadd_sat_i32(i32 %arg0, i32 noundef %arg1) {255; CHECK-LABEL: @uadd_sat_i32(256; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]257; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.uadd.sat.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]])258; CHECK-NEXT:    ret i32 [[CALL]]259;260  %call = call i32 @llvm.uadd.sat.i32(i32 %arg0, i32 %arg1)261  %freeze = freeze i32 %call262  ret i32 %freeze263}264 265define i32 @ssub_sat_i32(i32 %arg0, i32 noundef %arg1) {266; CHECK-LABEL: @ssub_sat_i32(267; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]268; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.ssub.sat.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]])269; CHECK-NEXT:    ret i32 [[CALL]]270;271  %call = call i32 @llvm.ssub.sat.i32(i32 %arg0, i32 %arg1)272  %freeze = freeze i32 %call273  ret i32 %freeze274}275 276define i32 @usub_sat_i32(i32 %arg0, i32 noundef %arg1) {277; CHECK-LABEL: @usub_sat_i32(278; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]279; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.usub.sat.i32(i32 [[ARG0_FR]], i32 [[ARG1:%.*]])280; CHECK-NEXT:    ret i32 [[CALL]]281;282  %call = call i32 @llvm.usub.sat.i32(i32 %arg0, i32 %arg1)283  %freeze = freeze i32 %call284  ret i32 %freeze285}286 287define i32 @sshl_sat_i32(i32 %arg0, i32 noundef %arg1) {288; CHECK-LABEL: @sshl_sat_i32(289; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.sshl.sat.i32(i32 [[ARG0:%.*]], i32 [[ARG1:%.*]])290; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[CALL]]291; CHECK-NEXT:    ret i32 [[FREEZE]]292;293  %call = call i32 @llvm.sshl.sat.i32(i32 %arg0, i32 %arg1)294  %freeze = freeze i32 %call295  ret i32 %freeze296}297 298define i32 @ushl_sat_i32(i32 %arg0, i32 noundef %arg1) {299; CHECK-LABEL: @ushl_sat_i32(300; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.ushl.sat.i32(i32 [[ARG0:%.*]], i32 [[ARG1:%.*]])301; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[CALL]]302; CHECK-NEXT:    ret i32 [[FREEZE]]303;304  %call = call i32 @llvm.ushl.sat.i32(i32 %arg0, i32 %arg1)305  %freeze = freeze i32 %call306  ret i32 %freeze307}308 309define i32 @sshl_sat_i32_safe_constant(i32 %arg0) {310; CHECK-LABEL: @sshl_sat_i32_safe_constant(311; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]312; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.sshl.sat.i32(i32 [[ARG0_FR]], i32 8)313; CHECK-NEXT:    ret i32 [[CALL]]314;315  %call = call i32 @llvm.sshl.sat.i32(i32 %arg0, i32 8)316  %freeze = freeze i32 %call317  ret i32 %freeze318}319 320define i32 @ushl_sat_i32_safe_constant(i32 %arg0) {321; CHECK-LABEL: @ushl_sat_i32_safe_constant(322; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze i32 [[ARG0:%.*]]323; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.ushl.sat.i32(i32 [[ARG0_FR]], i32 8)324; CHECK-NEXT:    ret i32 [[CALL]]325;326  %call = call i32 @llvm.ushl.sat.i32(i32 %arg0, i32 8)327  %freeze = freeze i32 %call328  ret i32 %freeze329}330 331define i32 @sshl_sat_i32_unsafe_constant(i32 %arg0) {332; CHECK-LABEL: @sshl_sat_i32_unsafe_constant(333; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.sshl.sat.i32(i32 [[ARG0:%.*]], i32 32)334; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[CALL]]335; CHECK-NEXT:    ret i32 [[FREEZE]]336;337  %call = call i32 @llvm.sshl.sat.i32(i32 %arg0, i32 32)338  %freeze = freeze i32 %call339  ret i32 %freeze340}341 342define i32 @ushl_sat_i32_unsafe_constant(i32 %arg0) {343; CHECK-LABEL: @ushl_sat_i32_unsafe_constant(344; CHECK-NEXT:    [[CALL:%.*]] = call i32 @llvm.ushl.sat.i32(i32 [[ARG0:%.*]], i32 32)345; CHECK-NEXT:    [[FREEZE:%.*]] = freeze i32 [[CALL]]346; CHECK-NEXT:    ret i32 [[FREEZE]]347;348  %call = call i32 @llvm.ushl.sat.i32(i32 %arg0, i32 32)349  %freeze = freeze i32 %call350  ret i32 %freeze351}352 353define <2 x i32> @sshl_sat_v2i32_safe_constant(<2 x i32> %arg0) {354; CHECK-LABEL: @sshl_sat_v2i32_safe_constant(355; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze <2 x i32> [[ARG0:%.*]]356; CHECK-NEXT:    [[CALL:%.*]] = call <2 x i32> @llvm.sshl.sat.v2i32(<2 x i32> [[ARG0_FR]], <2 x i32> <i32 8, i32 9>)357; CHECK-NEXT:    ret <2 x i32> [[CALL]]358;359  %call = call <2 x i32> @llvm.sshl.sat.v2i32(<2 x i32> %arg0, <2 x i32> <i32 8, i32 9>)360  %freeze = freeze <2 x i32> %call361  ret <2 x i32> %freeze362}363 364define <2 x i32> @ushl_sat_v2i32_safe_constant_vector(<2 x i32> %arg0) {365; CHECK-LABEL: @ushl_sat_v2i32_safe_constant_vector(366; CHECK-NEXT:    [[ARG0_FR:%.*]] = freeze <2 x i32> [[ARG0:%.*]]367; CHECK-NEXT:    [[CALL:%.*]] = call <2 x i32> @llvm.ushl.sat.v2i32(<2 x i32> [[ARG0_FR]], <2 x i32> <i32 8, i32 9>)368; CHECK-NEXT:    ret <2 x i32> [[CALL]]369;370  %call = call <2 x i32> @llvm.ushl.sat.v2i32(<2 x i32> %arg0, <2 x i32> <i32 8, i32 9>)371  %freeze = freeze <2 x i32> %call372  ret <2 x i32> %freeze373}374 375define <2 x i32> @ushl_sat_v2i32_unsafe_constant_vector(<2 x i32> %arg0) {376; CHECK-LABEL: @ushl_sat_v2i32_unsafe_constant_vector(377; CHECK-NEXT:    [[CALL:%.*]] = call <2 x i32> @llvm.ushl.sat.v2i32(<2 x i32> [[ARG0:%.*]], <2 x i32> <i32 undef, i32 9>)378; CHECK-NEXT:    [[FREEZE:%.*]] = freeze <2 x i32> [[CALL]]379; CHECK-NEXT:    ret <2 x i32> [[FREEZE]]380;381  %call = call <2 x i32> @llvm.ushl.sat.v2i32(<2 x i32> %arg0, <2 x i32> <i32 undef, i32 9>)382  %freeze = freeze <2 x i32> %call383  ret <2 x i32> %freeze384}385 386define <2 x i32> @sshl_sat_v2i32_unsafe_constant_vector(<2 x i32> %arg0) {387; CHECK-LABEL: @sshl_sat_v2i32_unsafe_constant_vector(388; CHECK-NEXT:    [[CALL:%.*]] = call <2 x i32> @llvm.sshl.sat.v2i32(<2 x i32> [[ARG0:%.*]], <2 x i32> <i32 undef, i32 9>)389; CHECK-NEXT:    [[FREEZE:%.*]] = freeze <2 x i32> [[CALL]]390; CHECK-NEXT:    ret <2 x i32> [[FREEZE]]391;392  %call = call <2 x i32> @llvm.sshl.sat.v2i32(<2 x i32> %arg0, <2 x i32> <i32 undef, i32 9>)393  %freeze = freeze <2 x i32> %call394  ret <2 x i32> %freeze395}396 397define <vscale x 2 x i32> @ushl_sat_v2i32_scalable_zeroinitializer(<vscale x 2 x i32> %arg0) {398; CHECK-LABEL: @ushl_sat_v2i32_scalable_zeroinitializer(399; CHECK-NEXT:    [[CALL:%.*]] = call <vscale x 2 x i32> @llvm.ushl.sat.nxv2i32(<vscale x 2 x i32> [[ARG0:%.*]], <vscale x 2 x i32> zeroinitializer)400; CHECK-NEXT:    [[FREEZE:%.*]] = freeze <vscale x 2 x i32> [[CALL]]401; CHECK-NEXT:    ret <vscale x 2 x i32> [[FREEZE]]402;403  %call = call <vscale x 2 x i32> @llvm.ushl.sat.nxv2i32(<vscale x 2 x i32> %arg0, <vscale x 2 x i32> zeroinitializer)404  %freeze = freeze <vscale x 2 x i32> %call405  ret <vscale x 2 x i32> %freeze406}407 408define <vscale x 2 x i32> @sshl_sat_v2i32_scalable_zeroinitializer(<vscale x 2 x i32> %arg0) {409; CHECK-LABEL: @sshl_sat_v2i32_scalable_zeroinitializer(410; CHECK-NEXT:    [[CALL:%.*]] = call <vscale x 2 x i32> @llvm.sshl.sat.nxv2i32(<vscale x 2 x i32> [[ARG0:%.*]], <vscale x 2 x i32> zeroinitializer)411; CHECK-NEXT:    [[FREEZE:%.*]] = freeze <vscale x 2 x i32> [[CALL]]412; CHECK-NEXT:    ret <vscale x 2 x i32> [[FREEZE]]413;414  %call = call <vscale x 2 x i32> @llvm.sshl.sat.nxv2i32(<vscale x 2 x i32> %arg0, <vscale x 2 x i32> zeroinitializer)415  %freeze = freeze <vscale x 2 x i32> %call416  ret <vscale x 2 x i32> %freeze417}418 419define i1 @widenable_condition() {420; CHECK-LABEL: @widenable_condition(421; CHECK-NEXT:    [[WC:%.*]] = call i1 @llvm.experimental.widenable.condition()422; CHECK-NEXT:    ret i1 [[WC]]423;424  %wc = call i1 @llvm.experimental.widenable.condition()425  %freeze = freeze i1 %wc426  ret i1 %freeze427}428 429define i32 @freeze_scmp(i32 %a0) {430; CHECK-LABEL: @freeze_scmp(431; CHECK-NEXT:    [[A0_FR:%.*]] = freeze i32 [[A0:%.*]]432; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.scmp.i32.i32(i32 2, i32 [[A0_FR]])433; CHECK-NEXT:    [[Z:%.*]] = call i32 @llvm.scmp.i32.i32(i32 0, i32 [[X]])434; CHECK-NEXT:    ret i32 [[Z]]435;436  %x = call i32 @llvm.scmp.i32(i32 2, i32 %a0)437  %y = freeze i32 %x438  %z = call i32 @llvm.scmp.i32(i32 0, i32 %y)439  ret i32 %z440}441 442define i32 @freeze_ucmp(i32 %a0) {443; CHECK-LABEL: @freeze_ucmp(444; CHECK-NEXT:    [[A0_FR:%.*]] = freeze i32 [[A0:%.*]]445; CHECK-NEXT:    [[X:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 2, i32 [[A0_FR]])446; CHECK-NEXT:    [[Z:%.*]] = call i32 @llvm.ucmp.i32.i32(i32 [[X]], i32 1)447; CHECK-NEXT:    ret i32 [[Z]]448;449  %x = call i32 @llvm.ucmp.i32(i32 2, i32 %a0)450  %y = freeze i32 %x451  %z = call i32 @llvm.ucmp.i32(i32 %y, i32 1)452  ret i32 %z453}454 455declare i32 @llvm.ctlz.i32(i32, i1 immarg)456declare i32 @llvm.cttz.i32(i32, i1 immarg)457declare i32 @llvm.abs.i32(i32, i1 immarg)458declare i32 @llvm.bswap.i32(i32)459declare i32 @llvm.bitreverse.i32(i32)460declare i32 @llvm.fshl.i32(i32, i32, i32)461declare i32 @llvm.fshr.i32(i32, i32, i32)462declare i32 @llvm.smax.i32(i32, i32)463declare i32 @llvm.smin.i32(i32, i32)464declare i32 @llvm.umax.i32(i32, i32)465declare i32 @llvm.umin.i32(i32, i32)466declare ptr @llvm.ptrmask.p0.i64(ptr, i64)467declare i32 @llvm.fptoui.sat.i32.f32(float)468declare i32 @llvm.fptosi.sat.i32.f32(float)469declare i32 @llvm.sadd.sat.i32(i32, i32)470declare i32 @llvm.uadd.sat.i32(i32, i32)471declare i32 @llvm.ssub.sat.i32(i32, i32)472declare i32 @llvm.usub.sat.i32(i32, i32)473declare i32 @llvm.sshl.sat.i32(i32, i32)474declare i32 @llvm.ushl.sat.i32(i32, i32)475declare <2 x i32> @llvm.sshl.sat.v2i32(<2 x i32>, <2 x i32>)476declare <2 x i32> @llvm.ushl.sat.v2i32(<2 x i32>, <2 x i32>)477declare <vscale x 2 x i32> @llvm.sshl.sat.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>)478declare <vscale x 2 x i32> @llvm.ushl.sat.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>)479declare i1 @llvm.experimental.widenable.condition()480