444 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=X64-NOBMI23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+bmi2 | FileCheck %s --check-prefixes=X64-BMI24; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefixes=X86-NOBMI25; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+bmi2 | FileCheck %s --check-prefixes=X86-BMI26 7define i64 @t0(i64 %val, i64 %shamt) nounwind {8; X64-NOBMI2-LABEL: t0:9; X64-NOBMI2: # %bb.0:10; X64-NOBMI2-NEXT: movq %rdi, %rax11; X64-NOBMI2-NEXT: leaq 32(%rsi), %rcx12; X64-NOBMI2-NEXT: negq %rcx13; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx14; X64-NOBMI2-NEXT: shlq %cl, %rax15; X64-NOBMI2-NEXT: retq16;17; X64-BMI2-LABEL: t0:18; X64-BMI2: # %bb.0:19; X64-BMI2-NEXT: addq $32, %rsi20; X64-BMI2-NEXT: negq %rsi21; X64-BMI2-NEXT: shlxq %rsi, %rdi, %rax22; X64-BMI2-NEXT: retq23;24; X86-NOBMI2-LABEL: t0:25; X86-NOBMI2: # %bb.0:26; X86-NOBMI2-NEXT: pushl %esi27; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %esi28; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %edx29; X86-NOBMI2-NEXT: movb $32, %cl30; X86-NOBMI2-NEXT: subb {{[0-9]+}}(%esp), %cl31; X86-NOBMI2-NEXT: movl %esi, %eax32; X86-NOBMI2-NEXT: shll %cl, %eax33; X86-NOBMI2-NEXT: shldl %cl, %esi, %edx34; X86-NOBMI2-NEXT: testb $32, %cl35; X86-NOBMI2-NEXT: je .LBB0_236; X86-NOBMI2-NEXT: # %bb.1:37; X86-NOBMI2-NEXT: movl %eax, %edx38; X86-NOBMI2-NEXT: xorl %eax, %eax39; X86-NOBMI2-NEXT: .LBB0_2:40; X86-NOBMI2-NEXT: popl %esi41; X86-NOBMI2-NEXT: retl42;43; X86-BMI2-LABEL: t0:44; X86-BMI2: # %bb.0:45; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax46; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx47; X86-BMI2-NEXT: movb $32, %cl48; X86-BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl49; X86-BMI2-NEXT: shldl %cl, %eax, %edx50; X86-BMI2-NEXT: shlxl %ecx, %eax, %eax51; X86-BMI2-NEXT: testb $32, %cl52; X86-BMI2-NEXT: je .LBB0_253; X86-BMI2-NEXT: # %bb.1:54; X86-BMI2-NEXT: movl %eax, %edx55; X86-BMI2-NEXT: xorl %eax, %eax56; X86-BMI2-NEXT: .LBB0_2:57; X86-BMI2-NEXT: retl58 %negshamt = sub i64 32, %shamt59 %shifted = shl i64 %val, %negshamt60 ret i64 %shifted61}62 63; The constant we are subtracting from should be a multiple of 32.64define i64 @n1(i64 %val, i64 %shamt) nounwind {65; X64-NOBMI2-LABEL: n1:66; X64-NOBMI2: # %bb.0:67; X64-NOBMI2-NEXT: movq %rdi, %rax68; X64-NOBMI2-NEXT: movb $33, %cl69; X64-NOBMI2-NEXT: subb %sil, %cl70; X64-NOBMI2-NEXT: shlq %cl, %rax71; X64-NOBMI2-NEXT: retq72;73; X64-BMI2-LABEL: n1:74; X64-BMI2: # %bb.0:75; X64-BMI2-NEXT: movb $33, %al76; X64-BMI2-NEXT: subb %sil, %al77; X64-BMI2-NEXT: shlxq %rax, %rdi, %rax78; X64-BMI2-NEXT: retq79;80; X86-NOBMI2-LABEL: n1:81; X86-NOBMI2: # %bb.0:82; X86-NOBMI2-NEXT: pushl %esi83; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %esi84; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %edx85; X86-NOBMI2-NEXT: movb $33, %cl86; X86-NOBMI2-NEXT: subb {{[0-9]+}}(%esp), %cl87; X86-NOBMI2-NEXT: movl %esi, %eax88; X86-NOBMI2-NEXT: shll %cl, %eax89; X86-NOBMI2-NEXT: shldl %cl, %esi, %edx90; X86-NOBMI2-NEXT: testb $32, %cl91; X86-NOBMI2-NEXT: je .LBB1_292; X86-NOBMI2-NEXT: # %bb.1:93; X86-NOBMI2-NEXT: movl %eax, %edx94; X86-NOBMI2-NEXT: xorl %eax, %eax95; X86-NOBMI2-NEXT: .LBB1_2:96; X86-NOBMI2-NEXT: popl %esi97; X86-NOBMI2-NEXT: retl98;99; X86-BMI2-LABEL: n1:100; X86-BMI2: # %bb.0:101; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax102; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx103; X86-BMI2-NEXT: movb $33, %cl104; X86-BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl105; X86-BMI2-NEXT: shldl %cl, %eax, %edx106; X86-BMI2-NEXT: shlxl %ecx, %eax, %eax107; X86-BMI2-NEXT: testb $32, %cl108; X86-BMI2-NEXT: je .LBB1_2109; X86-BMI2-NEXT: # %bb.1:110; X86-BMI2-NEXT: movl %eax, %edx111; X86-BMI2-NEXT: xorl %eax, %eax112; X86-BMI2-NEXT: .LBB1_2:113; X86-BMI2-NEXT: retl114 %negshamt = sub i64 33, %shamt115 %shifted = shl i64 %val, %negshamt116 ret i64 %shifted117}118define i64 @n2(i64 %val, i64 %shamt) nounwind {119; X64-NOBMI2-LABEL: n2:120; X64-NOBMI2: # %bb.0:121; X64-NOBMI2-NEXT: movq %rdi, %rax122; X64-NOBMI2-NEXT: movb $31, %cl123; X64-NOBMI2-NEXT: subb %sil, %cl124; X64-NOBMI2-NEXT: shlq %cl, %rax125; X64-NOBMI2-NEXT: retq126;127; X64-BMI2-LABEL: n2:128; X64-BMI2: # %bb.0:129; X64-BMI2-NEXT: movb $31, %al130; X64-BMI2-NEXT: subb %sil, %al131; X64-BMI2-NEXT: shlxq %rax, %rdi, %rax132; X64-BMI2-NEXT: retq133;134; X86-NOBMI2-LABEL: n2:135; X86-NOBMI2: # %bb.0:136; X86-NOBMI2-NEXT: pushl %esi137; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %esi138; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %edx139; X86-NOBMI2-NEXT: movb $31, %cl140; X86-NOBMI2-NEXT: subb {{[0-9]+}}(%esp), %cl141; X86-NOBMI2-NEXT: movl %esi, %eax142; X86-NOBMI2-NEXT: shll %cl, %eax143; X86-NOBMI2-NEXT: shldl %cl, %esi, %edx144; X86-NOBMI2-NEXT: testb $32, %cl145; X86-NOBMI2-NEXT: je .LBB2_2146; X86-NOBMI2-NEXT: # %bb.1:147; X86-NOBMI2-NEXT: movl %eax, %edx148; X86-NOBMI2-NEXT: xorl %eax, %eax149; X86-NOBMI2-NEXT: .LBB2_2:150; X86-NOBMI2-NEXT: popl %esi151; X86-NOBMI2-NEXT: retl152;153; X86-BMI2-LABEL: n2:154; X86-BMI2: # %bb.0:155; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax156; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx157; X86-BMI2-NEXT: movb $31, %cl158; X86-BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl159; X86-BMI2-NEXT: shldl %cl, %eax, %edx160; X86-BMI2-NEXT: shlxl %ecx, %eax, %eax161; X86-BMI2-NEXT: testb $32, %cl162; X86-BMI2-NEXT: je .LBB2_2163; X86-BMI2-NEXT: # %bb.1:164; X86-BMI2-NEXT: movl %eax, %edx165; X86-BMI2-NEXT: xorl %eax, %eax166; X86-BMI2-NEXT: .LBB2_2:167; X86-BMI2-NEXT: retl168 %negshamt = sub i64 31, %shamt169 %shifted = shl i64 %val, %negshamt170 ret i64 %shifted171}172 173define i64 @t3(i64 %val, i64 %shamt) nounwind {174; X64-NOBMI2-LABEL: t3:175; X64-NOBMI2: # %bb.0:176; X64-NOBMI2-NEXT: movq %rsi, %rcx177; X64-NOBMI2-NEXT: movq %rdi, %rax178; X64-NOBMI2-NEXT: negb %cl179; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx180; X64-NOBMI2-NEXT: shlq %cl, %rax181; X64-NOBMI2-NEXT: retq182;183; X64-BMI2-LABEL: t3:184; X64-BMI2: # %bb.0:185; X64-BMI2-NEXT: negb %sil186; X64-BMI2-NEXT: shlxq %rsi, %rdi, %rax187; X64-BMI2-NEXT: retq188;189; X86-NOBMI2-LABEL: t3:190; X86-NOBMI2: # %bb.0:191; X86-NOBMI2-NEXT: pushl %esi192; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %esi193; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %edx194; X86-NOBMI2-NEXT: movb $64, %cl195; X86-NOBMI2-NEXT: subb {{[0-9]+}}(%esp), %cl196; X86-NOBMI2-NEXT: movl %esi, %eax197; X86-NOBMI2-NEXT: shll %cl, %eax198; X86-NOBMI2-NEXT: shldl %cl, %esi, %edx199; X86-NOBMI2-NEXT: testb $32, %cl200; X86-NOBMI2-NEXT: je .LBB3_2201; X86-NOBMI2-NEXT: # %bb.1:202; X86-NOBMI2-NEXT: movl %eax, %edx203; X86-NOBMI2-NEXT: xorl %eax, %eax204; X86-NOBMI2-NEXT: .LBB3_2:205; X86-NOBMI2-NEXT: popl %esi206; X86-NOBMI2-NEXT: retl207;208; X86-BMI2-LABEL: t3:209; X86-BMI2: # %bb.0:210; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax211; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx212; X86-BMI2-NEXT: movb $64, %cl213; X86-BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl214; X86-BMI2-NEXT: shldl %cl, %eax, %edx215; X86-BMI2-NEXT: shlxl %ecx, %eax, %eax216; X86-BMI2-NEXT: testb $32, %cl217; X86-BMI2-NEXT: je .LBB3_2218; X86-BMI2-NEXT: # %bb.1:219; X86-BMI2-NEXT: movl %eax, %edx220; X86-BMI2-NEXT: xorl %eax, %eax221; X86-BMI2-NEXT: .LBB3_2:222; X86-BMI2-NEXT: retl223 %negshamt = sub i64 64, %shamt224 %shifted = shl i64 %val, %negshamt225 ret i64 %shifted226}227 228define i64 @t4(i64 %val, i64 %shamt) nounwind {229; X64-NOBMI2-LABEL: t4:230; X64-NOBMI2: # %bb.0:231; X64-NOBMI2-NEXT: movq %rdi, %rax232; X64-NOBMI2-NEXT: leaq 96(%rsi), %rcx233; X64-NOBMI2-NEXT: negq %rcx234; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx235; X64-NOBMI2-NEXT: shlq %cl, %rax236; X64-NOBMI2-NEXT: retq237;238; X64-BMI2-LABEL: t4:239; X64-BMI2: # %bb.0:240; X64-BMI2-NEXT: addq $96, %rsi241; X64-BMI2-NEXT: negq %rsi242; X64-BMI2-NEXT: shlxq %rsi, %rdi, %rax243; X64-BMI2-NEXT: retq244;245; X86-NOBMI2-LABEL: t4:246; X86-NOBMI2: # %bb.0:247; X86-NOBMI2-NEXT: pushl %esi248; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %esi249; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %edx250; X86-NOBMI2-NEXT: movb $96, %cl251; X86-NOBMI2-NEXT: subb {{[0-9]+}}(%esp), %cl252; X86-NOBMI2-NEXT: movl %esi, %eax253; X86-NOBMI2-NEXT: shll %cl, %eax254; X86-NOBMI2-NEXT: shldl %cl, %esi, %edx255; X86-NOBMI2-NEXT: testb $32, %cl256; X86-NOBMI2-NEXT: je .LBB4_2257; X86-NOBMI2-NEXT: # %bb.1:258; X86-NOBMI2-NEXT: movl %eax, %edx259; X86-NOBMI2-NEXT: xorl %eax, %eax260; X86-NOBMI2-NEXT: .LBB4_2:261; X86-NOBMI2-NEXT: popl %esi262; X86-NOBMI2-NEXT: retl263;264; X86-BMI2-LABEL: t4:265; X86-BMI2: # %bb.0:266; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax267; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx268; X86-BMI2-NEXT: movb $96, %cl269; X86-BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl270; X86-BMI2-NEXT: shldl %cl, %eax, %edx271; X86-BMI2-NEXT: shlxl %ecx, %eax, %eax272; X86-BMI2-NEXT: testb $32, %cl273; X86-BMI2-NEXT: je .LBB4_2274; X86-BMI2-NEXT: # %bb.1:275; X86-BMI2-NEXT: movl %eax, %edx276; X86-BMI2-NEXT: xorl %eax, %eax277; X86-BMI2-NEXT: .LBB4_2:278; X86-BMI2-NEXT: retl279 %negshamt = sub i64 96, %shamt280 %shifted = shl i64 %val, %negshamt281 ret i64 %shifted282}283 284define i64 @t5_cse(i64 %val, i64 %shamt, ptr%dst) nounwind {285; X64-NOBMI2-LABEL: t5_cse:286; X64-NOBMI2: # %bb.0:287; X64-NOBMI2-NEXT: movq %rdi, %rax288; X64-NOBMI2-NEXT: leaq 32(%rsi), %rcx289; X64-NOBMI2-NEXT: movq %rcx, (%rdx)290; X64-NOBMI2-NEXT: negq %rcx291; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx292; X64-NOBMI2-NEXT: shlq %cl, %rax293; X64-NOBMI2-NEXT: retq294;295; X64-BMI2-LABEL: t5_cse:296; X64-BMI2: # %bb.0:297; X64-BMI2-NEXT: addq $32, %rsi298; X64-BMI2-NEXT: movq %rsi, (%rdx)299; X64-BMI2-NEXT: negq %rsi300; X64-BMI2-NEXT: shlxq %rsi, %rdi, %rax301; X64-BMI2-NEXT: retq302;303; X86-NOBMI2-LABEL: t5_cse:304; X86-NOBMI2: # %bb.0:305; X86-NOBMI2-NEXT: pushl %ebx306; X86-NOBMI2-NEXT: pushl %edi307; X86-NOBMI2-NEXT: pushl %esi308; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %esi309; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %edx310; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx311; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %eax312; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %edi313; X86-NOBMI2-NEXT: movl %eax, %ebx314; X86-NOBMI2-NEXT: addl $32, %ebx315; X86-NOBMI2-NEXT: adcl $0, %edi316; X86-NOBMI2-NEXT: movl %ebx, (%ecx)317; X86-NOBMI2-NEXT: movl %edi, 4(%ecx)318; X86-NOBMI2-NEXT: movb $32, %cl319; X86-NOBMI2-NEXT: subb %al, %cl320; X86-NOBMI2-NEXT: movl %esi, %eax321; X86-NOBMI2-NEXT: shll %cl, %eax322; X86-NOBMI2-NEXT: shldl %cl, %esi, %edx323; X86-NOBMI2-NEXT: testb $32, %cl324; X86-NOBMI2-NEXT: je .LBB5_2325; X86-NOBMI2-NEXT: # %bb.1:326; X86-NOBMI2-NEXT: movl %eax, %edx327; X86-NOBMI2-NEXT: xorl %eax, %eax328; X86-NOBMI2-NEXT: .LBB5_2:329; X86-NOBMI2-NEXT: popl %esi330; X86-NOBMI2-NEXT: popl %edi331; X86-NOBMI2-NEXT: popl %ebx332; X86-NOBMI2-NEXT: retl333;334; X86-BMI2-LABEL: t5_cse:335; X86-BMI2: # %bb.0:336; X86-BMI2-NEXT: pushl %ebx337; X86-BMI2-NEXT: pushl %edi338; X86-BMI2-NEXT: pushl %esi339; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax340; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx341; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx342; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ebx343; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi344; X86-BMI2-NEXT: movl %ebx, %edi345; X86-BMI2-NEXT: addl $32, %edi346; X86-BMI2-NEXT: adcl $0, %esi347; X86-BMI2-NEXT: movl %edi, (%ecx)348; X86-BMI2-NEXT: movl %esi, 4(%ecx)349; X86-BMI2-NEXT: movb $32, %cl350; X86-BMI2-NEXT: subb %bl, %cl351; X86-BMI2-NEXT: shldl %cl, %eax, %edx352; X86-BMI2-NEXT: shlxl %ecx, %eax, %eax353; X86-BMI2-NEXT: testb $32, %cl354; X86-BMI2-NEXT: je .LBB5_2355; X86-BMI2-NEXT: # %bb.1:356; X86-BMI2-NEXT: movl %eax, %edx357; X86-BMI2-NEXT: xorl %eax, %eax358; X86-BMI2-NEXT: .LBB5_2:359; X86-BMI2-NEXT: popl %esi360; X86-BMI2-NEXT: popl %edi361; X86-BMI2-NEXT: popl %ebx362; X86-BMI2-NEXT: retl363 %incshamt = add i64 %shamt, 32364 store i64 %incshamt, ptr %dst365 %negshamt = sub i64 32, %shamt366 %shifted = shl i64 %val, %negshamt367 ret i64 %shifted368}369 370define i64 @t6_cse2(i64 %val, i64 %shamt, ptr%dst) nounwind {371; X64-NOBMI2-LABEL: t6_cse2:372; X64-NOBMI2: # %bb.0:373; X64-NOBMI2-NEXT: movq %rdi, %rax374; X64-NOBMI2-NEXT: movl $32, %ecx375; X64-NOBMI2-NEXT: subq %rsi, %rcx376; X64-NOBMI2-NEXT: movq %rcx, (%rdx)377; X64-NOBMI2-NEXT: # kill: def $cl killed $cl killed $rcx378; X64-NOBMI2-NEXT: shlq %cl, %rax379; X64-NOBMI2-NEXT: retq380;381; X64-BMI2-LABEL: t6_cse2:382; X64-BMI2: # %bb.0:383; X64-BMI2-NEXT: movl $32, %eax384; X64-BMI2-NEXT: subq %rsi, %rax385; X64-BMI2-NEXT: movq %rax, (%rdx)386; X64-BMI2-NEXT: shlxq %rax, %rdi, %rax387; X64-BMI2-NEXT: retq388;389; X86-NOBMI2-LABEL: t6_cse2:390; X86-NOBMI2: # %bb.0:391; X86-NOBMI2-NEXT: pushl %edi392; X86-NOBMI2-NEXT: pushl %esi393; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %esi394; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %edx395; X86-NOBMI2-NEXT: movl {{[0-9]+}}(%esp), %eax396; X86-NOBMI2-NEXT: xorl %edi, %edi397; X86-NOBMI2-NEXT: movl $32, %ecx398; X86-NOBMI2-NEXT: subl {{[0-9]+}}(%esp), %ecx399; X86-NOBMI2-NEXT: sbbl {{[0-9]+}}(%esp), %edi400; X86-NOBMI2-NEXT: movl %ecx, (%eax)401; X86-NOBMI2-NEXT: movl %edi, 4(%eax)402; X86-NOBMI2-NEXT: movl %esi, %eax403; X86-NOBMI2-NEXT: shll %cl, %eax404; X86-NOBMI2-NEXT: shldl %cl, %esi, %edx405; X86-NOBMI2-NEXT: testb $32, %cl406; X86-NOBMI2-NEXT: je .LBB6_2407; X86-NOBMI2-NEXT: # %bb.1:408; X86-NOBMI2-NEXT: movl %eax, %edx409; X86-NOBMI2-NEXT: xorl %eax, %eax410; X86-NOBMI2-NEXT: .LBB6_2:411; X86-NOBMI2-NEXT: popl %esi412; X86-NOBMI2-NEXT: popl %edi413; X86-NOBMI2-NEXT: retl414;415; X86-BMI2-LABEL: t6_cse2:416; X86-BMI2: # %bb.0:417; X86-BMI2-NEXT: pushl %edi418; X86-BMI2-NEXT: pushl %esi419; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax420; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx421; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi422; X86-BMI2-NEXT: xorl %edi, %edi423; X86-BMI2-NEXT: movl $32, %ecx424; X86-BMI2-NEXT: subl {{[0-9]+}}(%esp), %ecx425; X86-BMI2-NEXT: sbbl {{[0-9]+}}(%esp), %edi426; X86-BMI2-NEXT: movl %ecx, (%esi)427; X86-BMI2-NEXT: movl %edi, 4(%esi)428; X86-BMI2-NEXT: shldl %cl, %eax, %edx429; X86-BMI2-NEXT: shlxl %ecx, %eax, %eax430; X86-BMI2-NEXT: testb $32, %cl431; X86-BMI2-NEXT: je .LBB6_2432; X86-BMI2-NEXT: # %bb.1:433; X86-BMI2-NEXT: movl %eax, %edx434; X86-BMI2-NEXT: xorl %eax, %eax435; X86-BMI2-NEXT: .LBB6_2:436; X86-BMI2-NEXT: popl %esi437; X86-BMI2-NEXT: popl %edi438; X86-BMI2-NEXT: retl439 %negshamt = sub i64 32, %shamt440 store i64 %negshamt, ptr %dst441 %shifted = shl i64 %val, %negshamt442 ret i64 %shifted443}444