1112 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-- -mattr=+sse2 | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=X644 5define i32 @freeze_and(i32 %a0) nounwind {6; X86-LABEL: freeze_and:7; X86: # %bb.0:8; X86-NEXT: movl {{[0-9]+}}(%esp), %eax9; X86-NEXT: andl $7, %eax10; X86-NEXT: retl11;12; X64-LABEL: freeze_and:13; X64: # %bb.0:14; X64-NEXT: movl %edi, %eax15; X64-NEXT: andl $7, %eax16; X64-NEXT: retq17 %x = and i32 %a0, 1518 %y = freeze i32 %x19 %z = and i32 %y, 720 ret i32 %z21}22 23define i32 @freeze_and_extra_use(i32 %a0, ptr %escape) nounwind {24; X86-LABEL: freeze_and_extra_use:25; X86: # %bb.0:26; X86-NEXT: movl {{[0-9]+}}(%esp), %eax27; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx28; X86-NEXT: movl %eax, (%ecx)29; X86-NEXT: andl $7, %eax30; X86-NEXT: retl31;32; X64-LABEL: freeze_and_extra_use:33; X64: # %bb.0:34; X64-NEXT: movl %edi, %eax35; X64-NEXT: movl %edi, (%rsi)36; X64-NEXT: andl $7, %eax37; X64-NEXT: retq38 store i32 %a0, ptr %escape39 %x = and i32 %a0, 1540 %y = freeze i32 %x41 %z = and i32 %y, 742 ret i32 %z43}44define i32 @freeze_and_extra_use2(i32 %a0, ptr %escape) nounwind {45; X86-LABEL: freeze_and_extra_use2:46; X86: # %bb.0:47; X86-NEXT: movl {{[0-9]+}}(%esp), %eax48; X86-NEXT: andl $15, %eax49; X86-NEXT: retl50;51; X64-LABEL: freeze_and_extra_use2:52; X64: # %bb.0:53; X64-NEXT: movl %edi, %eax54; X64-NEXT: andl $15, %eax55; X64-NEXT: retq56 %x = and i32 %a0, 1557 %y = freeze i32 %x58 %z = and i32 %y, 759 %w = and i32 %y, %a060 ret i32 %w61}62 63define <2 x i64> @freeze_and_vec(<2 x i64> %a0) nounwind {64; X86-LABEL: freeze_and_vec:65; X86: # %bb.0:66; X86-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm067; X86-NEXT: retl68;69; X64-LABEL: freeze_and_vec:70; X64: # %bb.0:71; X64-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm072; X64-NEXT: retq73 %x = and <2 x i64> %a0, <i64 15, i64 7>74 %y = freeze <2 x i64> %x75 %z = and <2 x i64> %y, <i64 7, i64 15>76 ret <2 x i64> %z77}78 79define i32 @freeze_or(i32 %a0) nounwind {80; X86-LABEL: freeze_or:81; X86: # %bb.0:82; X86-NEXT: movl {{[0-9]+}}(%esp), %eax83; X86-NEXT: orl $15, %eax84; X86-NEXT: retl85;86; X64-LABEL: freeze_or:87; X64: # %bb.0:88; X64-NEXT: movl %edi, %eax89; X64-NEXT: orl $15, %eax90; X64-NEXT: retq91 %x = or i32 %a0, 392 %y = freeze i32 %x93 %z = or i32 %y, 1294 ret i32 %z95}96 97define <2 x i64> @freeze_or_vec(<2 x i64> %a0) nounwind {98; X86-LABEL: freeze_or_vec:99; X86: # %bb.0:100; X86-NEXT: orps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0101; X86-NEXT: retl102;103; X64-LABEL: freeze_or_vec:104; X64: # %bb.0:105; X64-NEXT: vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0106; X64-NEXT: retq107 %x = or <2 x i64> %a0, <i64 1, i64 3>108 %y = freeze <2 x i64> %x109 %z = or <2 x i64> %y, <i64 14, i64 12>110 ret <2 x i64> %z111}112 113define i32 @freeze_xor(i32 %a0) nounwind {114; X86-LABEL: freeze_xor:115; X86: # %bb.0:116; X86-NEXT: movl {{[0-9]+}}(%esp), %eax117; X86-NEXT: xorl $15, %eax118; X86-NEXT: retl119;120; X64-LABEL: freeze_xor:121; X64: # %bb.0:122; X64-NEXT: movl %edi, %eax123; X64-NEXT: xorl $15, %eax124; X64-NEXT: retq125 %x = xor i32 %a0, 3126 %y = freeze i32 %x127 %z = xor i32 %y, 12128 ret i32 %z129}130 131define <8 x i16> @freeze_xor_vec(<8 x i16> %a0) nounwind {132; X86-LABEL: freeze_xor_vec:133; X86: # %bb.0:134; X86-NEXT: pcmpeqd %xmm1, %xmm1135; X86-NEXT: pxor %xmm1, %xmm0136; X86-NEXT: retl137;138; X64-LABEL: freeze_xor_vec:139; X64: # %bb.0:140; X64-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1141; X64-NEXT: vpxor %xmm1, %xmm0, %xmm0142; X64-NEXT: retq143 %x = xor <8 x i16> %a0, <i16 -1, i16 0, i16 -1, i16 0, i16 -1, i16 0, i16 -1, i16 0>144 %y = freeze <8 x i16> %x145 %z = xor <8 x i16> %y, <i16 0, i16 -1, i16 0, i16 -1, i16 0, i16 -1, i16 0, i16 -1>146 ret <8 x i16> %z147}148 149define i32 @freeze_add(i32 %a0) nounwind {150; X86-LABEL: freeze_add:151; X86: # %bb.0:152; X86-NEXT: movl {{[0-9]+}}(%esp), %eax153; X86-NEXT: addl $2, %eax154; X86-NEXT: retl155;156; X64-LABEL: freeze_add:157; X64: # %bb.0:158; X64-NEXT: # kill: def $edi killed $edi def $rdi159; X64-NEXT: leal 2(%rdi), %eax160; X64-NEXT: retq161 %x = add i32 %a0, 1162 %y = freeze i32 %x163 %z = add i32 %y, 1164 ret i32 %z165}166 167define i32 @freeze_add_nsw(i32 %a0) nounwind {168; X86-LABEL: freeze_add_nsw:169; X86: # %bb.0:170; X86-NEXT: movl {{[0-9]+}}(%esp), %eax171; X86-NEXT: addl $2, %eax172; X86-NEXT: retl173;174; X64-LABEL: freeze_add_nsw:175; X64: # %bb.0:176; X64-NEXT: # kill: def $edi killed $edi def $rdi177; X64-NEXT: leal 2(%rdi), %eax178; X64-NEXT: retq179 %x = add nsw i32 %a0, 1180 %y = freeze i32 %x181 %z = add i32 %y, 1182 ret i32 %z183}184 185define <4 x i32> @freeze_add_vec(<4 x i32> %a0) nounwind {186; X86-LABEL: freeze_add_vec:187; X86: # %bb.0:188; X86-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0189; X86-NEXT: retl190;191; X64-LABEL: freeze_add_vec:192; X64: # %bb.0:193; X64-NEXT: vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]194; X64-NEXT: vpaddd %xmm1, %xmm0, %xmm0195; X64-NEXT: retq196 %x = add <4 x i32> %a0, <i32 1, i32 2, i32 3, i32 4>197 %y = freeze <4 x i32> %x198 %z = add <4 x i32> %y, <i32 4, i32 3, i32 2, i32 1>199 ret <4 x i32> %z200}201 202define <4 x i32> @freeze_add_vec_undef(<4 x i32> %a0) nounwind {203; X86-LABEL: freeze_add_vec_undef:204; X86: # %bb.0:205; X86-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0206; X86-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0207; X86-NEXT: retl208;209; X64-LABEL: freeze_add_vec_undef:210; X64: # %bb.0:211; X64-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0212; X64-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0213; X64-NEXT: retq214 %x = add <4 x i32> %a0, <i32 1, i32 2, i32 3, i32 undef>215 %y = freeze <4 x i32> %x216 %z = add <4 x i32> %y, <i32 4, i32 3, i32 2, i32 undef>217 ret <4 x i32> %z218}219 220define i32 @freeze_sub(i32 %a0) nounwind {221; X86-LABEL: freeze_sub:222; X86: # %bb.0:223; X86-NEXT: movl {{[0-9]+}}(%esp), %eax224; X86-NEXT: addl $-2, %eax225; X86-NEXT: retl226;227; X64-LABEL: freeze_sub:228; X64: # %bb.0:229; X64-NEXT: # kill: def $edi killed $edi def $rdi230; X64-NEXT: leal -2(%rdi), %eax231; X64-NEXT: retq232 %x = sub i32 %a0, 1233 %y = freeze i32 %x234 %z = sub i32 %y, 1235 ret i32 %z236}237 238define i32 @freeze_sub_nuw(i32 %a0) nounwind {239; X86-LABEL: freeze_sub_nuw:240; X86: # %bb.0:241; X86-NEXT: movl {{[0-9]+}}(%esp), %eax242; X86-NEXT: addl $-2, %eax243; X86-NEXT: retl244;245; X64-LABEL: freeze_sub_nuw:246; X64: # %bb.0:247; X64-NEXT: # kill: def $edi killed $edi def $rdi248; X64-NEXT: leal -2(%rdi), %eax249; X64-NEXT: retq250 %x = sub nuw i32 %a0, 1251 %y = freeze i32 %x252 %z = sub i32 %y, 1253 ret i32 %z254}255 256define <4 x i32> @freeze_sub_vec(<4 x i32> %a0) nounwind {257; X86-LABEL: freeze_sub_vec:258; X86: # %bb.0:259; X86-NEXT: psubd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0260; X86-NEXT: retl261;262; X64-LABEL: freeze_sub_vec:263; X64: # %bb.0:264; X64-NEXT: vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]265; X64-NEXT: vpsubd %xmm1, %xmm0, %xmm0266; X64-NEXT: retq267 %x = sub <4 x i32> %a0, <i32 1, i32 2, i32 3, i32 4>268 %y = freeze <4 x i32> %x269 %z = sub <4 x i32> %y, <i32 4, i32 3, i32 2, i32 1>270 ret <4 x i32> %z271}272 273define <4 x i32> @freeze_sub_vec_undef(<4 x i32> %a0) nounwind {274; X86-LABEL: freeze_sub_vec_undef:275; X86: # %bb.0:276; X86-NEXT: psubd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0277; X86-NEXT: psubd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0278; X86-NEXT: retl279;280; X64-LABEL: freeze_sub_vec_undef:281; X64: # %bb.0:282; X64-NEXT: vpsubd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0283; X64-NEXT: vpsubd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0284; X64-NEXT: retq285 %x = sub <4 x i32> %a0, <i32 1, i32 2, i32 3, i32 undef>286 %y = freeze <4 x i32> %x287 %z = sub <4 x i32> %y, <i32 4, i32 3, i32 2, i32 undef>288 ret <4 x i32> %z289}290 291define i32 @freeze_mul(i32 %a0) nounwind {292; X86-LABEL: freeze_mul:293; X86: # %bb.0:294; X86-NEXT: movl {{[0-9]+}}(%esp), %eax295; X86-NEXT: shll $2, %eax296; X86-NEXT: retl297;298; X64-LABEL: freeze_mul:299; X64: # %bb.0:300; X64-NEXT: # kill: def $edi killed $edi def $rdi301; X64-NEXT: leal (,%rdi,4), %eax302; X64-NEXT: retq303 %x = mul i32 %a0, 2304 %y = freeze i32 %x305 %z = mul i32 %y, 2306 ret i32 %z307}308 309define i32 @freeze_mul_nsw(i32 %a0) nounwind {310; X86-LABEL: freeze_mul_nsw:311; X86: # %bb.0:312; X86-NEXT: movl {{[0-9]+}}(%esp), %eax313; X86-NEXT: leal (%eax,%eax,4), %eax314; X86-NEXT: leal (%eax,%eax,2), %eax315; X86-NEXT: retl316;317; X64-LABEL: freeze_mul_nsw:318; X64: # %bb.0:319; X64-NEXT: # kill: def $edi killed $edi def $rdi320; X64-NEXT: leal (%rdi,%rdi,4), %eax321; X64-NEXT: leal (%rax,%rax,2), %eax322; X64-NEXT: retq323 %x = mul nsw i32 %a0, 3324 %y = freeze i32 %x325 %z = mul i32 %y, 5326 ret i32 %z327}328 329define <8 x i16> @freeze_mul_vec(<8 x i16> %a0) nounwind {330; X86-LABEL: freeze_mul_vec:331; X86: # %bb.0:332; X86-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [4,6,6,4,4,6,6,4]333; X86-NEXT: retl334;335; X64-LABEL: freeze_mul_vec:336; X64: # %bb.0:337; X64-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4,6,6,4,4,6,6,4]338; X64-NEXT: retq339 %x = mul <8 x i16> %a0, <i16 1, i16 2, i16 3, i16 4, i16 4, i16 3, i16 2, i16 1>340 %y = freeze <8 x i16> %x341 %z = mul <8 x i16> %y, <i16 4, i16 3, i16 2, i16 1, i16 1, i16 2, i16 3, i16 4>342 ret <8 x i16> %z343}344 345define <8 x i16> @freeze_mul_vec_undef(<8 x i16> %a0) nounwind {346; X86-LABEL: freeze_mul_vec_undef:347; X86: # %bb.0:348; X86-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [1,2,3,4,4,3,0,1]349; X86-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [4,3,2,1,1,2,u,4]350; X86-NEXT: retl351;352; X64-LABEL: freeze_mul_vec_undef:353; X64: # %bb.0:354; X64-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [1,2,3,4,4,3,0,1]355; X64-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [4,3,2,1,1,2,u,4]356; X64-NEXT: retq357 %x = mul <8 x i16> %a0, <i16 1, i16 2, i16 3, i16 4, i16 4, i16 3, i16 undef, i16 1>358 %y = freeze <8 x i16> %x359 %z = mul <8 x i16> %y, <i16 4, i16 3, i16 2, i16 1, i16 1, i16 2, i16 undef, i16 4>360 ret <8 x i16> %z361}362 363define i32 @freeze_shl(i32 %a0) nounwind {364; X86-LABEL: freeze_shl:365; X86: # %bb.0:366; X86-NEXT: movl {{[0-9]+}}(%esp), %eax367; X86-NEXT: shll $3, %eax368; X86-NEXT: retl369;370; X64-LABEL: freeze_shl:371; X64: # %bb.0:372; X64-NEXT: # kill: def $edi killed $edi def $rdi373; X64-NEXT: leal (,%rdi,8), %eax374; X64-NEXT: retq375 %x = shl i32 %a0, 1376 %y = freeze i32 %x377 %z = shl i32 %y, 2378 ret i32 %z379}380 381define i32 @freeze_shl_nsw(i32 %a0) nounwind {382; X86-LABEL: freeze_shl_nsw:383; X86: # %bb.0:384; X86-NEXT: movl {{[0-9]+}}(%esp), %eax385; X86-NEXT: shll $8, %eax386; X86-NEXT: retl387;388; X64-LABEL: freeze_shl_nsw:389; X64: # %bb.0:390; X64-NEXT: movl %edi, %eax391; X64-NEXT: shll $8, %eax392; X64-NEXT: retq393 %x = shl nsw i32 %a0, 3394 %y = freeze i32 %x395 %z = shl i32 %y, 5396 ret i32 %z397}398 399define i32 @freeze_shl_outofrange(i32 %a0) nounwind {400; X86-LABEL: freeze_shl_outofrange:401; X86: # %bb.0:402; X86-NEXT: shll $2, %eax403; X86-NEXT: retl404;405; X64-LABEL: freeze_shl_outofrange:406; X64: # %bb.0:407; X64-NEXT: shll $2, %eax408; X64-NEXT: retq409 %x = shl i32 %a0, 32410 %y = freeze i32 %x411 %z = shl i32 %y, 2412 ret i32 %z413}414 415define <2 x i64> @freeze_shl_vec(<2 x i64> %a0) nounwind {416; X86-LABEL: freeze_shl_vec:417; X86: # %bb.0:418; X86-NEXT: movdqa %xmm0, %xmm1419; X86-NEXT: psllq $4, %xmm1420; X86-NEXT: psllq $2, %xmm0421; X86-NEXT: movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]422; X86-NEXT: retl423;424; X64-LABEL: freeze_shl_vec:425; X64: # %bb.0:426; X64-NEXT: vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0427; X64-NEXT: retq428 %x = shl <2 x i64> %a0, <i64 2, i64 1>429 %y = freeze <2 x i64> %x430 %z = shl <2 x i64> %y, <i64 2, i64 1>431 ret <2 x i64> %z432}433 434define <2 x i64> @freeze_shl_vec_outofrange(<2 x i64> %a0) nounwind {435; X86-LABEL: freeze_shl_vec_outofrange:436; X86: # %bb.0:437; X86-NEXT: psllq $3, %xmm0438; X86-NEXT: retl439;440; X64-LABEL: freeze_shl_vec_outofrange:441; X64: # %bb.0:442; X64-NEXT: vpsllvq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0443; X64-NEXT: vpsllq $2, %xmm0, %xmm0444; X64-NEXT: retq445 %x = shl <2 x i64> %a0, <i64 1, i64 64>446 %y = freeze <2 x i64> %x447 %z = shl <2 x i64> %y, <i64 2, i64 2>448 ret <2 x i64> %z449}450 451define i32 @freeze_ashr(i32 %a0) nounwind {452; X86-LABEL: freeze_ashr:453; X86: # %bb.0:454; X86-NEXT: movl {{[0-9]+}}(%esp), %eax455; X86-NEXT: sarl $3, %eax456; X86-NEXT: sarl $3, %eax457; X86-NEXT: retl458;459; X64-LABEL: freeze_ashr:460; X64: # %bb.0:461; X64-NEXT: movl %edi, %eax462; X64-NEXT: sarl $6, %eax463; X64-NEXT: retq464 %x = ashr i32 %a0, 3465 %y = freeze i32 %x466 %z = ashr i32 %y, 3467 ret i32 %z468}469 470define i32 @freeze_ashr_exact(i32 %a0) nounwind {471; X86-LABEL: freeze_ashr_exact:472; X86: # %bb.0:473; X86-NEXT: movl {{[0-9]+}}(%esp), %eax474; X86-NEXT: sarl $3, %eax475; X86-NEXT: sarl $6, %eax476; X86-NEXT: retl477;478; X64-LABEL: freeze_ashr_exact:479; X64: # %bb.0:480; X64-NEXT: movl %edi, %eax481; X64-NEXT: sarl $3, %eax482; X64-NEXT: sarl $6, %eax483; X64-NEXT: retq484 %x = ashr exact i32 %a0, 3485 %y = freeze i32 %x486 %z = ashr i32 %y, 6487 ret i32 %z488}489 490define i32 @freeze_ashr_exact_extra_use(i32 %a0, ptr %escape) nounwind {491; X86-LABEL: freeze_ashr_exact_extra_use:492; X86: # %bb.0:493; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx494; X86-NEXT: movl {{[0-9]+}}(%esp), %eax495; X86-NEXT: sarl $3, %eax496; X86-NEXT: movl %eax, %edx497; X86-NEXT: sarl $6, %eax498; X86-NEXT: movl %edx, (%ecx)499; X86-NEXT: retl500;501; X64-LABEL: freeze_ashr_exact_extra_use:502; X64: # %bb.0:503; X64-NEXT: movl %edi, %eax504; X64-NEXT: sarl $3, %eax505; X64-NEXT: movl %eax, %ecx506; X64-NEXT: sarl $6, %eax507; X64-NEXT: movl %ecx, (%rsi)508; X64-NEXT: retq509 %x = ashr exact i32 %a0, 3510 %y = freeze i32 %x511 %z = ashr i32 %y, 6512 store i32 %x, ptr %escape513 ret i32 %z514}515 516define i32 @freeze_ashr_outofrange(i32 %a0) nounwind {517; X86-LABEL: freeze_ashr_outofrange:518; X86: # %bb.0:519; X86-NEXT: sarl $3, %eax520; X86-NEXT: retl521;522; X64-LABEL: freeze_ashr_outofrange:523; X64: # %bb.0:524; X64-NEXT: sarl $3, %eax525; X64-NEXT: retq526 %x = ashr i32 %a0, 32527 %y = freeze i32 %x528 %z = ashr i32 %y, 3529 ret i32 %z530}531 532define <8 x i16> @freeze_ashr_vec(<8 x i16> %a0) nounwind {533; X86-LABEL: freeze_ashr_vec:534; X86: # %bb.0:535; X86-NEXT: psraw $4, %xmm0536; X86-NEXT: retl537;538; X64-LABEL: freeze_ashr_vec:539; X64: # %bb.0:540; X64-NEXT: vpsraw $4, %xmm0, %xmm0541; X64-NEXT: retq542 %x = ashr <8 x i16> %a0, <i16 3, i16 1, i16 3, i16 1, i16 3, i16 1, i16 3, i16 1>543 %y = freeze <8 x i16> %x544 %z = ashr <8 x i16> %y, <i16 1, i16 3, i16 1, i16 3, i16 1, i16 3, i16 1, i16 3>545 ret <8 x i16> %z546}547 548define <4 x i32> @freeze_ashr_vec_outofrange(<4 x i32> %a0) nounwind {549; X86-LABEL: freeze_ashr_vec_outofrange:550; X86: # %bb.0:551; X86-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]552; X86-NEXT: psrad $3, %xmm0553; X86-NEXT: retl554;555; X64-LABEL: freeze_ashr_vec_outofrange:556; X64: # %bb.0:557; X64-NEXT: vpsravd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0558; X64-NEXT: vpsrad $2, %xmm0, %xmm0559; X64-NEXT: retq560 %x = ashr <4 x i32> %a0, <i32 1, i32 33, i32 1, i32 1>561 %y = freeze <4 x i32> %x562 %z = ashr <4 x i32> %y, <i32 2, i32 2, i32 2, i32 2>563 ret <4 x i32> %z564}565 566define i32 @freeze_lshr(i32 %a0) nounwind {567; X86-LABEL: freeze_lshr:568; X86: # %bb.0:569; X86-NEXT: movl {{[0-9]+}}(%esp), %eax570; X86-NEXT: shrl $2, %eax571; X86-NEXT: shrl %eax572; X86-NEXT: retl573;574; X64-LABEL: freeze_lshr:575; X64: # %bb.0:576; X64-NEXT: movl %edi, %eax577; X64-NEXT: shrl $3, %eax578; X64-NEXT: retq579 %x = lshr i32 %a0, 2580 %y = freeze i32 %x581 %z = lshr i32 %y, 1582 ret i32 %z583}584 585define i32 @freeze_lshr_exact(i32 %a0) nounwind {586; X86-LABEL: freeze_lshr_exact:587; X86: # %bb.0:588; X86-NEXT: movl {{[0-9]+}}(%esp), %eax589; X86-NEXT: shrl $3, %eax590; X86-NEXT: shrl $5, %eax591; X86-NEXT: retl592;593; X64-LABEL: freeze_lshr_exact:594; X64: # %bb.0:595; X64-NEXT: movl %edi, %eax596; X64-NEXT: shrl $3, %eax597; X64-NEXT: shrl $5, %eax598; X64-NEXT: retq599 %x = lshr exact i32 %a0, 3600 %y = freeze i32 %x601 %z = lshr i32 %y, 5602 ret i32 %z603}604 605define i32 @freeze_lshr_exact_extra_use(i32 %a0, ptr %escape) nounwind {606; X86-LABEL: freeze_lshr_exact_extra_use:607; X86: # %bb.0:608; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx609; X86-NEXT: movl {{[0-9]+}}(%esp), %eax610; X86-NEXT: shrl $3, %eax611; X86-NEXT: movl %eax, %edx612; X86-NEXT: shrl $5, %eax613; X86-NEXT: movl %edx, (%ecx)614; X86-NEXT: retl615;616; X64-LABEL: freeze_lshr_exact_extra_use:617; X64: # %bb.0:618; X64-NEXT: movl %edi, %eax619; X64-NEXT: shrl $3, %eax620; X64-NEXT: movl %eax, %ecx621; X64-NEXT: shrl $5, %eax622; X64-NEXT: movl %ecx, (%rsi)623; X64-NEXT: retq624 %x = lshr exact i32 %a0, 3625 %y = freeze i32 %x626 %z = lshr i32 %y, 5627 store i32 %x, ptr %escape628 ret i32 %z629}630 631define i32 @freeze_lshr_outofrange(i32 %a0) nounwind {632; X86-LABEL: freeze_lshr_outofrange:633; X86: # %bb.0:634; X86-NEXT: shrl %eax635; X86-NEXT: retl636;637; X64-LABEL: freeze_lshr_outofrange:638; X64: # %bb.0:639; X64-NEXT: shrl %eax640; X64-NEXT: retq641 %x = lshr i32 %a0, 32642 %y = freeze i32 %x643 %z = lshr i32 %y, 1644 ret i32 %z645}646 647define <8 x i16> @freeze_lshr_vec(<8 x i16> %a0) nounwind {648; X86-LABEL: freeze_lshr_vec:649; X86: # %bb.0:650; X86-NEXT: psrlw $3, %xmm0651; X86-NEXT: retl652;653; X64-LABEL: freeze_lshr_vec:654; X64: # %bb.0:655; X64-NEXT: vpsrlw $3, %xmm0, %xmm0656; X64-NEXT: retq657 %x = lshr <8 x i16> %a0, <i16 2, i16 1, i16 2, i16 1, i16 2, i16 1, i16 2, i16 1>658 %y = freeze <8 x i16> %x659 %z = lshr <8 x i16> %y, <i16 1, i16 2, i16 1, i16 2, i16 1, i16 2, i16 1, i16 2>660 ret <8 x i16> %z661}662 663define <4 x i32> @freeze_lshr_vec_outofrange(<4 x i32> %a0) nounwind {664; X86-LABEL: freeze_lshr_vec_outofrange:665; X86: # %bb.0:666; X86-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,3,2,3]667; X86-NEXT: psrld $3, %xmm0668; X86-NEXT: retl669;670; X64-LABEL: freeze_lshr_vec_outofrange:671; X64: # %bb.0:672; X64-NEXT: vpsrlvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0673; X64-NEXT: vpsrld $2, %xmm0, %xmm0674; X64-NEXT: retq675 %x = lshr <4 x i32> %a0, <i32 1, i32 33, i32 1, i32 1>676 %y = freeze <4 x i32> %x677 %z = lshr <4 x i32> %y, <i32 2, i32 2, i32 2, i32 2>678 ret <4 x i32> %z679}680 681define i32 @freeze_rotl(i32 %a0) nounwind {682; X86-LABEL: freeze_rotl:683; X86: # %bb.0:684; X86-NEXT: movl {{[0-9]+}}(%esp), %eax685; X86-NEXT: roll $10, %eax686; X86-NEXT: retl687;688; X64-LABEL: freeze_rotl:689; X64: # %bb.0:690; X64-NEXT: movl %edi, %eax691; X64-NEXT: roll $10, %eax692; X64-NEXT: retq693 %x = call i32 @llvm.fshl.i32(i32 %a0, i32 %a0, i32 5)694 %y = freeze i32 %x695 %z = call i32 @llvm.fshl.i32(i32 %y, i32 %y, i32 5)696 ret i32 %z697}698declare i32 @llvm.fshl.i32(i32, i32, i32)699 700define <4 x i32> @freeze_rotl_vec(<4 x i32> %a0) nounwind {701; X86-LABEL: freeze_rotl_vec:702; X86: # %bb.0:703; X86-NEXT: movdqa %xmm0, %xmm1704; X86-NEXT: psrld $2, %xmm1705; X86-NEXT: pslld $30, %xmm0706; X86-NEXT: por %xmm1, %xmm0707; X86-NEXT: retl708;709; X64-LABEL: freeze_rotl_vec:710; X64: # %bb.0:711; X64-NEXT: vpsrld $2, %xmm0, %xmm1712; X64-NEXT: vpslld $30, %xmm0, %xmm0713; X64-NEXT: vpor %xmm1, %xmm0, %xmm0714; X64-NEXT: retq715 %x = call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %a0, <4 x i32> %a0, <4 x i32> <i32 0, i32 1, i32 2, i32 3>)716 %y = freeze <4 x i32> %x717 %z = call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %y, <4 x i32> %y, <4 x i32> <i32 30, i32 29, i32 28, i32 27>)718 ret <4 x i32> %z719}720declare <4 x i32> @llvm.fshl.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)721 722define i32 @freeze_rotr(i32 %a0) nounwind {723; X86-LABEL: freeze_rotr:724; X86: # %bb.0:725; X86-NEXT: movl {{[0-9]+}}(%esp), %eax726; X86-NEXT: rorl $24, %eax727; X86-NEXT: retl728;729; X64-LABEL: freeze_rotr:730; X64: # %bb.0:731; X64-NEXT: movl %edi, %eax732; X64-NEXT: rorl $24, %eax733; X64-NEXT: retq734 %x = call i32 @llvm.fshr.i32(i32 %a0, i32 %a0, i32 11)735 %y = freeze i32 %x736 %z = call i32 @llvm.fshr.i32(i32 %y, i32 %y, i32 13)737 ret i32 %z738}739declare i32 @llvm.fshr.i32(i32, i32, i32)740 741define <4 x i32> @freeze_rotr_vec(<4 x i32> %a0) nounwind {742; X86-LABEL: freeze_rotr_vec:743; X86: # %bb.0:744; X86-NEXT: movdqa %xmm0, %xmm1745; X86-NEXT: psrld $31, %xmm1746; X86-NEXT: paddd %xmm0, %xmm0747; X86-NEXT: por %xmm1, %xmm0748; X86-NEXT: retl749;750; X64-LABEL: freeze_rotr_vec:751; X64: # %bb.0:752; X64-NEXT: vpsrld $31, %xmm0, %xmm1753; X64-NEXT: vpaddd %xmm0, %xmm0, %xmm0754; X64-NEXT: vpor %xmm1, %xmm0, %xmm0755; X64-NEXT: retq756 %x = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %a0, <4 x i32> %a0, <4 x i32> <i32 0, i32 1, i32 2, i32 3>)757 %y = freeze <4 x i32> %x758 %z = call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %y, <4 x i32> %y, <4 x i32> <i32 31, i32 30, i32 29, i32 28>)759 ret <4 x i32> %z760}761declare <4 x i32> @llvm.fshr.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)762 763define i32 @freeze_fshl(i32 %a0, i32 %a1, i32 %a2) nounwind {764; X86-LABEL: freeze_fshl:765; X86: # %bb.0:766; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx767; X86-NEXT: movl {{[0-9]+}}(%esp), %eax768; X86-NEXT: shrl $27, %eax769; X86-NEXT: shldl $27, %ecx, %eax770; X86-NEXT: retl771;772; X64-LABEL: freeze_fshl:773; X64: # %bb.0:774; X64-NEXT: movl %esi, %eax775; X64-NEXT: shrl $27, %eax776; X64-NEXT: shldl $27, %edx, %eax777; X64-NEXT: retq778 %f1 = freeze i32 %a1779 %f2 = freeze i32 %a2780 %x = call i32 @llvm.fshl.i32(i32 %a0, i32 %f1, i32 5)781 %y = freeze i32 %x782 %z = call i32 @llvm.fshl.i32(i32 %y, i32 %f2, i32 27)783 ret i32 %z784}785 786define i32 @freeze_fshr(i32 %a0, i32 %a1, i32 %a2) nounwind {787; X86-LABEL: freeze_fshr:788; X86: # %bb.0:789; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx790; X86-NEXT: movl {{[0-9]+}}(%esp), %eax791; X86-NEXT: shrl %eax792; X86-NEXT: shldl $1, %ecx, %eax793; X86-NEXT: retl794;795; X64-LABEL: freeze_fshr:796; X64: # %bb.0:797; X64-NEXT: movl %esi, %eax798; X64-NEXT: shrl %eax799; X64-NEXT: shldl $1, %edx, %eax800; X64-NEXT: retq801 %f1 = freeze i32 %a1802 %f2 = freeze i32 %a2803 %x = call i32 @llvm.fshr.i32(i32 %a0, i32 %f1, i32 1)804 %y = freeze i32 %x805 %z = call i32 @llvm.fshr.i32(i32 %y, i32 %f2, i32 31)806 ret i32 %z807}808 809define i32 @freeze_saddo(i32 %a0, i32 %a1, i8 %a2, i8 %a3) nounwind {810; X86-LABEL: freeze_saddo:811; X86: # %bb.0:812; X86-NEXT: movl {{[0-9]+}}(%esp), %eax813; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx814; X86-NEXT: addb {{[0-9]+}}(%esp), %cl815; X86-NEXT: adcl $0, %eax816; X86-NEXT: addl {{[0-9]+}}(%esp), %eax817; X86-NEXT: retl818;819; X64-LABEL: freeze_saddo:820; X64: # %bb.0:821; X64-NEXT: movl %edi, %eax822; X64-NEXT: addb %cl, %dl823; X64-NEXT: adcl %esi, %eax824; X64-NEXT: retq825 %b = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 %a2, i8 %a3)826 %b.o = extractvalue {i8, i1} %b, 1827 %x = zext i1 %b.o to i32828 829 %f0 = freeze i32 %a0830 %o = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %f0, i32 %x)831 %f = freeze {i32, i1} %o832 %v = extractvalue {i32, i1} %f, 0833 %r = add i32 %v, %a1834 ret i32 %r835}836 837define i32 @freeze_uaddo(i32 %a0, i32 %a1, i8 %a2, i8 %a3) nounwind {838; X86-LABEL: freeze_uaddo:839; X86: # %bb.0:840; X86-NEXT: movl {{[0-9]+}}(%esp), %eax841; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx842; X86-NEXT: addb {{[0-9]+}}(%esp), %cl843; X86-NEXT: adcl $0, %eax844; X86-NEXT: addl {{[0-9]+}}(%esp), %eax845; X86-NEXT: retl846;847; X64-LABEL: freeze_uaddo:848; X64: # %bb.0:849; X64-NEXT: movl %edi, %eax850; X64-NEXT: addb %cl, %dl851; X64-NEXT: adcl %esi, %eax852; X64-NEXT: retq853 %b = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 %a2, i8 %a3)854 %b.o = extractvalue {i8, i1} %b, 1855 %x = zext i1 %b.o to i32856 857 %f0 = freeze i32 %a0858 %o = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %f0, i32 %x)859 %f = freeze {i32, i1} %o860 %v = extractvalue {i32, i1} %f, 0861 %r = add i32 %v, %a1862 ret i32 %r863}864 865define i32 @freeze_ssubo(i32 %a0, i32 %a1, i8 %a2, i8 %a3) nounwind {866; X86-LABEL: freeze_ssubo:867; X86: # %bb.0:868; X86-NEXT: movl {{[0-9]+}}(%esp), %eax869; X86-NEXT: movzbl {{[0-9]+}}(%esp), %edx870; X86-NEXT: xorl %ecx, %ecx871; X86-NEXT: addb {{[0-9]+}}(%esp), %dl872; X86-NEXT: setb %cl873; X86-NEXT: andl $1, %ecx874; X86-NEXT: subl %ecx, %eax875; X86-NEXT: subl {{[0-9]+}}(%esp), %eax876; X86-NEXT: retl877;878; X64-LABEL: freeze_ssubo:879; X64: # %bb.0:880; X64-NEXT: movl %edi, %eax881; X64-NEXT: addb %cl, %dl882; X64-NEXT: sbbl $0, %eax883; X64-NEXT: subl %esi, %eax884; X64-NEXT: retq885 %b = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 %a2, i8 %a3)886 %b.o = extractvalue {i8, i1} %b, 1887 %x = zext i1 %b.o to i32888 889 %f0 = freeze i32 %a0890 %o = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %f0, i32 %x)891 %f = freeze {i32, i1} %o892 %v = extractvalue {i32, i1} %f, 0893 %r = sub i32 %v, %a1894 ret i32 %r895}896 897define i32 @freeze_usubo(i32 %a0, i32 %a1, i8 %a2, i8 %a3) nounwind {898; X86-LABEL: freeze_usubo:899; X86: # %bb.0:900; X86-NEXT: movl {{[0-9]+}}(%esp), %eax901; X86-NEXT: movzbl {{[0-9]+}}(%esp), %edx902; X86-NEXT: xorl %ecx, %ecx903; X86-NEXT: addb {{[0-9]+}}(%esp), %dl904; X86-NEXT: setb %cl905; X86-NEXT: andl $1, %ecx906; X86-NEXT: subl %ecx, %eax907; X86-NEXT: subl {{[0-9]+}}(%esp), %eax908; X86-NEXT: retl909;910; X64-LABEL: freeze_usubo:911; X64: # %bb.0:912; X64-NEXT: movl %edi, %eax913; X64-NEXT: addb %cl, %dl914; X64-NEXT: sbbl $0, %eax915; X64-NEXT: subl %esi, %eax916; X64-NEXT: retq917 %b = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 %a2, i8 %a3)918 %b.o = extractvalue {i8, i1} %b, 1919 %x = zext i1 %b.o to i32920 921 %f0 = freeze i32 %a0922 %o = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %f0, i32 %x)923 %f = freeze {i32, i1} %o924 %v = extractvalue {i32, i1} %f, 0925 %r = sub i32 %v, %a1926 ret i32 %r927}928 929define i32 @freeze_scmp(i32 %a0) nounwind {930; X86-LABEL: freeze_scmp:931; X86: # %bb.0:932; X86-NEXT: movl $2, %eax933; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax934; X86-NEXT: setl %al935; X86-NEXT: setg %cl936; X86-NEXT: subb %al, %cl937; X86-NEXT: movsbl %cl, %eax938; X86-NEXT: negl %eax939; X86-NEXT: setl %al940; X86-NEXT: setg %cl941; X86-NEXT: subb %al, %cl942; X86-NEXT: movsbl %cl, %eax943; X86-NEXT: retl944;945; X64-LABEL: freeze_scmp:946; X64: # %bb.0:947; X64-NEXT: movl $2, %eax948; X64-NEXT: cmpl %edi, %eax949; X64-NEXT: setl %al950; X64-NEXT: setg %cl951; X64-NEXT: subb %al, %cl952; X64-NEXT: movsbl %cl, %eax953; X64-NEXT: negl %eax954; X64-NEXT: setl %al955; X64-NEXT: setg %cl956; X64-NEXT: subb %al, %cl957; X64-NEXT: movsbl %cl, %eax958; X64-NEXT: retq959 %x = call i32 @llvm.scmp.i32(i32 2, i32 %a0)960 %y = freeze i32 %x961 %z = call i32 @llvm.scmp.i32(i32 0, i32 %y)962 ret i32 %z963}964 965define i32 @freeze_ucmp(i32 %a0) nounwind {966; X86-LABEL: freeze_ucmp:967; X86: # %bb.0:968; X86-NEXT: movl $2, %eax969; X86-NEXT: cmpl {{[0-9]+}}(%esp), %eax970; X86-NEXT: seta %al971; X86-NEXT: sbbb $0, %al972; X86-NEXT: movsbl %al, %eax973; X86-NEXT: cmpl $2, %eax974; X86-NEXT: setae %cl975; X86-NEXT: cmpl $1, %eax976; X86-NEXT: sbbb $0, %cl977; X86-NEXT: movsbl %cl, %eax978; X86-NEXT: retl979;980; X64-LABEL: freeze_ucmp:981; X64: # %bb.0:982; X64-NEXT: movl $2, %eax983; X64-NEXT: cmpl %edi, %eax984; X64-NEXT: seta %al985; X64-NEXT: sbbb $0, %al986; X64-NEXT: movsbl %al, %eax987; X64-NEXT: cmpl $2, %eax988; X64-NEXT: setae %cl989; X64-NEXT: cmpl $1, %eax990; X64-NEXT: sbbb $0, %cl991; X64-NEXT: movsbl %cl, %eax992; X64-NEXT: retq993 %x = call i32 @llvm.ucmp.i32(i32 2, i32 %a0)994 %y = freeze i32 %x995 %z = call i32 @llvm.ucmp.i32(i32 %y, i32 1)996 ret i32 %z997}998 999define void @pr59676_frozen(ptr %dst, i32 %x.orig) {1000; X86-LABEL: pr59676_frozen:1001; X86: # %bb.0:1002; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1003; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1004; X86-NEXT: imull %eax, %eax1005; X86-NEXT: imull $84, %eax, %eax1006; X86-NEXT: movl $818089009, %edx # imm = 0x30C30C311007; X86-NEXT: imull %edx1008; X86-NEXT: movl %edx, %eax1009; X86-NEXT: shrl $31, %eax1010; X86-NEXT: sarl $3, %edx1011; X86-NEXT: addl %eax, %edx1012; X86-NEXT: movl %edx, (%ecx)1013; X86-NEXT: retl1014;1015; X64-LABEL: pr59676_frozen:1016; X64: # %bb.0:1017; X64-NEXT: imull %esi, %esi1018; X64-NEXT: imull $84, %esi, %eax1019; X64-NEXT: cltq1020; X64-NEXT: imulq $818089009, %rax, %rax # imm = 0x30C30C311021; X64-NEXT: movq %rax, %rcx1022; X64-NEXT: shrq $63, %rcx1023; X64-NEXT: sarq $35, %rax1024; X64-NEXT: addl %ecx, %eax1025; X64-NEXT: movl %eax, (%rdi)1026; X64-NEXT: retq1027 %x = freeze i32 %x.orig1028 %mul = mul i32 %x, 421029 %shl = shl i32 %x, 11030 %mul.frozen = freeze i32 %mul1031 %shl.frozen = freeze i32 %shl1032 %area = mul i32 %mul.frozen, %shl.frozen1033 %div = sdiv i32 %area, 421034 store i32 %div, ptr %dst, align 41035 ret void1036}1037define void @pr59676_nsw_frozen(ptr %dst, i32 %x.orig) {1038; X86-LABEL: pr59676_nsw_frozen:1039; X86: # %bb.0:1040; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1041; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1042; X86-NEXT: imull %eax, %eax1043; X86-NEXT: imull $84, %eax, %eax1044; X86-NEXT: movl $818089009, %edx # imm = 0x30C30C311045; X86-NEXT: imull %edx1046; X86-NEXT: movl %edx, %eax1047; X86-NEXT: shrl $31, %eax1048; X86-NEXT: sarl $3, %edx1049; X86-NEXT: addl %eax, %edx1050; X86-NEXT: movl %edx, (%ecx)1051; X86-NEXT: retl1052;1053; X64-LABEL: pr59676_nsw_frozen:1054; X64: # %bb.0:1055; X64-NEXT: imull %esi, %esi1056; X64-NEXT: imull $84, %esi, %eax1057; X64-NEXT: cltq1058; X64-NEXT: imulq $818089009, %rax, %rax # imm = 0x30C30C311059; X64-NEXT: movq %rax, %rcx1060; X64-NEXT: shrq $63, %rcx1061; X64-NEXT: sarq $35, %rax1062; X64-NEXT: addl %ecx, %eax1063; X64-NEXT: movl %eax, (%rdi)1064; X64-NEXT: retq1065 %x = freeze i32 %x.orig1066 %mul = mul nsw i32 %x, 421067 %shl = shl i32 %x, 11068 %mul.frozen = freeze i32 %mul1069 %shl.frozen = freeze i32 %shl1070 %area = mul i32 %mul.frozen, %shl.frozen1071 %div = sdiv i32 %area, 421072 store i32 %div, ptr %dst, align 41073 ret void1074}1075define void @pr59676_nsw(ptr %dst, i32 %x) {1076; X86-LABEL: pr59676_nsw:1077; X86: # %bb.0:1078; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1079; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1080; X86-NEXT: imull %eax, %eax1081; X86-NEXT: imull $84, %eax, %eax1082; X86-NEXT: movl $818089009, %edx # imm = 0x30C30C311083; X86-NEXT: imull %edx1084; X86-NEXT: movl %edx, %eax1085; X86-NEXT: shrl $31, %eax1086; X86-NEXT: sarl $3, %edx1087; X86-NEXT: addl %eax, %edx1088; X86-NEXT: movl %edx, (%ecx)1089; X86-NEXT: retl1090;1091; X64-LABEL: pr59676_nsw:1092; X64: # %bb.0:1093; X64-NEXT: imull %esi, %esi1094; X64-NEXT: imull $84, %esi, %eax1095; X64-NEXT: cltq1096; X64-NEXT: imulq $818089009, %rax, %rax # imm = 0x30C30C311097; X64-NEXT: movq %rax, %rcx1098; X64-NEXT: shrq $63, %rcx1099; X64-NEXT: sarq $35, %rax1100; X64-NEXT: addl %ecx, %eax1101; X64-NEXT: movl %eax, (%rdi)1102; X64-NEXT: retq1103 %mul = mul nsw i32 %x, 421104 %shl = shl i32 %x, 11105 %mul.frozen = freeze i32 %mul1106 %shl.frozen = freeze i32 %shl1107 %area = mul i32 %mul.frozen, %shl.frozen1108 %div = sdiv i32 %area, 421109 store i32 %div, ptr %dst, align 41110 ret void1111}1112