brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.6 KiB · 114d558 Raw
628 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-- -mcpu=corei7 | FileCheck %s --check-prefix=CHECK32 --check-prefix=X863; RUN: llc < %s -mtriple=i686-- -mcpu=corei7-avx | FileCheck %s --check-prefix=CHECK32 --check-prefix=SHLD4; RUN: llc < %s -mtriple=i686-- -mcpu=core-avx2 | FileCheck %s --check-prefix=CHECK32 --check-prefix=BMI25; RUN: llc < %s -mtriple=x86_64-- -mcpu=corei7 | FileCheck %s --check-prefix=CHECK64 --check-prefix=X646; RUN: llc < %s -mtriple=x86_64-- -mcpu=corei7-avx | FileCheck %s --check-prefix=CHECK64 --check-prefix=SHLD647; RUN: llc < %s -mtriple=x86_64-- -mcpu=core-avx2 | FileCheck %s --check-prefix=CHECK64 --check-prefix=BMI2648 9define i32 @foo(i32 %x, i32 %y, i32 %z) nounwind readnone {10; CHECK32-LABEL: foo:11; CHECK32:       # %bb.0: # %entry12; CHECK32-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx13; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %eax14; CHECK32-NEXT:    roll %cl, %eax15; CHECK32-NEXT:    retl16;17; CHECK64-LABEL: foo:18; CHECK64:       # %bb.0: # %entry19; CHECK64-NEXT:    movl %edx, %ecx20; CHECK64-NEXT:    movl %edi, %eax21; CHECK64-NEXT:    # kill: def $cl killed $cl killed $ecx22; CHECK64-NEXT:    roll %cl, %eax23; CHECK64-NEXT:    retq24entry:25	%0 = shl i32 %x, %z26	%1 = sub i32 32, %z27	%2 = lshr i32 %x, %128	%3 = or i32 %2, %029	ret i32 %330}31 32define i32 @bar(i32 %x, i32 %y, i32 %z) nounwind readnone {33; CHECK32-LABEL: bar:34; CHECK32:       # %bb.0: # %entry35; CHECK32-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx36; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %edx37; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %eax38; CHECK32-NEXT:    shldl %cl, %edx, %eax39; CHECK32-NEXT:    retl40;41; CHECK64-LABEL: bar:42; CHECK64:       # %bb.0: # %entry43; CHECK64-NEXT:    movl %edx, %ecx44; CHECK64-NEXT:    movl %esi, %eax45; CHECK64-NEXT:    # kill: def $cl killed $cl killed $ecx46; CHECK64-NEXT:    shldl %cl, %edi, %eax47; CHECK64-NEXT:    retq48entry:49	%0 = shl i32 %y, %z50	%1 = sub i32 32, %z51	%2 = lshr i32 %x, %152	%3 = or i32 %2, %053	ret i32 %354}55 56define i32 @un(i32 %x, i32 %y, i32 %z) nounwind readnone {57; CHECK32-LABEL: un:58; CHECK32:       # %bb.0: # %entry59; CHECK32-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx60; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %eax61; CHECK32-NEXT:    rorl %cl, %eax62; CHECK32-NEXT:    retl63;64; CHECK64-LABEL: un:65; CHECK64:       # %bb.0: # %entry66; CHECK64-NEXT:    movl %edx, %ecx67; CHECK64-NEXT:    movl %edi, %eax68; CHECK64-NEXT:    # kill: def $cl killed $cl killed $ecx69; CHECK64-NEXT:    rorl %cl, %eax70; CHECK64-NEXT:    retq71entry:72	%0 = lshr i32 %x, %z73	%1 = sub i32 32, %z74	%2 = shl i32 %x, %175	%3 = or i32 %2, %076	ret i32 %377}78 79define i32 @bu(i32 %x, i32 %y, i32 %z) nounwind readnone {80; CHECK32-LABEL: bu:81; CHECK32:       # %bb.0: # %entry82; CHECK32-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx83; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %edx84; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %eax85; CHECK32-NEXT:    shrdl %cl, %edx, %eax86; CHECK32-NEXT:    retl87;88; CHECK64-LABEL: bu:89; CHECK64:       # %bb.0: # %entry90; CHECK64-NEXT:    movl %edx, %ecx91; CHECK64-NEXT:    movl %esi, %eax92; CHECK64-NEXT:    # kill: def $cl killed $cl killed $ecx93; CHECK64-NEXT:    shrdl %cl, %edi, %eax94; CHECK64-NEXT:    retq95entry:96	%0 = lshr i32 %y, %z97	%1 = sub i32 32, %z98	%2 = shl i32 %x, %199	%3 = or i32 %2, %0100	ret i32 %3101}102 103define i32 @xfoo(i32 %x, i32 %y, i32 %z) nounwind readnone {104; X86-LABEL: xfoo:105; X86:       # %bb.0: # %entry106; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax107; X86-NEXT:    roll $7, %eax108; X86-NEXT:    retl109;110; SHLD-LABEL: xfoo:111; SHLD:       # %bb.0: # %entry112; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax113; SHLD-NEXT:    shldl $7, %eax, %eax114; SHLD-NEXT:    retl115;116; BMI2-LABEL: xfoo:117; BMI2:       # %bb.0: # %entry118; BMI2-NEXT:    rorxl $25, {{[0-9]+}}(%esp), %eax119; BMI2-NEXT:    retl120;121; X64-LABEL: xfoo:122; X64:       # %bb.0: # %entry123; X64-NEXT:    movl %edi, %eax124; X64-NEXT:    roll $7, %eax125; X64-NEXT:    retq126;127; SHLD64-LABEL: xfoo:128; SHLD64:       # %bb.0: # %entry129; SHLD64-NEXT:    movl %edi, %eax130; SHLD64-NEXT:    shldl $7, %eax, %eax131; SHLD64-NEXT:    retq132;133; BMI264-LABEL: xfoo:134; BMI264:       # %bb.0: # %entry135; BMI264-NEXT:    rorxl $25, %edi, %eax136; BMI264-NEXT:    retq137entry:138	%0 = lshr i32 %x, 25139	%1 = shl i32 %x, 7140	%2 = or i32 %0, %1141	ret i32 %2142}143 144define i32 @xfoop(ptr %p) nounwind readnone {145; X86-LABEL: xfoop:146; X86:       # %bb.0: # %entry147; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax148; X86-NEXT:    movl (%eax), %eax149; X86-NEXT:    roll $7, %eax150; X86-NEXT:    retl151;152; SHLD-LABEL: xfoop:153; SHLD:       # %bb.0: # %entry154; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax155; SHLD-NEXT:    movl (%eax), %eax156; SHLD-NEXT:    shldl $7, %eax, %eax157; SHLD-NEXT:    retl158;159; BMI2-LABEL: xfoop:160; BMI2:       # %bb.0: # %entry161; BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax162; BMI2-NEXT:    rorxl $25, (%eax), %eax163; BMI2-NEXT:    retl164;165; X64-LABEL: xfoop:166; X64:       # %bb.0: # %entry167; X64-NEXT:    movl (%rdi), %eax168; X64-NEXT:    roll $7, %eax169; X64-NEXT:    retq170;171; SHLD64-LABEL: xfoop:172; SHLD64:       # %bb.0: # %entry173; SHLD64-NEXT:    movl (%rdi), %eax174; SHLD64-NEXT:    shldl $7, %eax, %eax175; SHLD64-NEXT:    retq176;177; BMI264-LABEL: xfoop:178; BMI264:       # %bb.0: # %entry179; BMI264-NEXT:    rorxl $25, (%rdi), %eax180; BMI264-NEXT:    retq181entry:182	%x = load i32, ptr %p183	%a = lshr i32 %x, 25184	%b = shl i32 %x, 7185	%c = or i32 %a, %b186	ret i32 %c187}188 189define i32 @xbar(i32 %x, i32 %y, i32 %z) nounwind readnone {190; CHECK32-LABEL: xbar:191; CHECK32:       # %bb.0: # %entry192; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %ecx193; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %eax194; CHECK32-NEXT:    shldl $7, %ecx, %eax195; CHECK32-NEXT:    retl196;197; CHECK64-LABEL: xbar:198; CHECK64:       # %bb.0: # %entry199; CHECK64-NEXT:    movl %edi, %eax200; CHECK64-NEXT:    shrdl $25, %esi, %eax201; CHECK64-NEXT:    retq202entry:203	%0 = shl i32 %y, 7204	%1 = lshr i32 %x, 25205	%2 = or i32 %0, %1206	ret i32 %2207}208 209define i32 @xun(i32 %x, i32 %y, i32 %z) nounwind readnone {210; X86-LABEL: xun:211; X86:       # %bb.0: # %entry212; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax213; X86-NEXT:    roll $25, %eax214; X86-NEXT:    retl215;216; SHLD-LABEL: xun:217; SHLD:       # %bb.0: # %entry218; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax219; SHLD-NEXT:    shldl $25, %eax, %eax220; SHLD-NEXT:    retl221;222; BMI2-LABEL: xun:223; BMI2:       # %bb.0: # %entry224; BMI2-NEXT:    rorxl $7, {{[0-9]+}}(%esp), %eax225; BMI2-NEXT:    retl226;227; X64-LABEL: xun:228; X64:       # %bb.0: # %entry229; X64-NEXT:    movl %edi, %eax230; X64-NEXT:    roll $25, %eax231; X64-NEXT:    retq232;233; SHLD64-LABEL: xun:234; SHLD64:       # %bb.0: # %entry235; SHLD64-NEXT:    movl %edi, %eax236; SHLD64-NEXT:    shldl $25, %eax, %eax237; SHLD64-NEXT:    retq238;239; BMI264-LABEL: xun:240; BMI264:       # %bb.0: # %entry241; BMI264-NEXT:    rorxl $7, %edi, %eax242; BMI264-NEXT:    retq243entry:244	%0 = lshr i32 %x, 7245	%1 = shl i32 %x, 25246	%2 = or i32 %0, %1247	ret i32 %2248}249 250define i32 @xunp(ptr %p) nounwind readnone {251; X86-LABEL: xunp:252; X86:       # %bb.0: # %entry253; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax254; X86-NEXT:    movl (%eax), %eax255; X86-NEXT:    roll $25, %eax256; X86-NEXT:    retl257;258; SHLD-LABEL: xunp:259; SHLD:       # %bb.0: # %entry260; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax261; SHLD-NEXT:    movl (%eax), %eax262; SHLD-NEXT:    shldl $25, %eax, %eax263; SHLD-NEXT:    retl264;265; BMI2-LABEL: xunp:266; BMI2:       # %bb.0: # %entry267; BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax268; BMI2-NEXT:    rorxl $7, (%eax), %eax269; BMI2-NEXT:    retl270;271; X64-LABEL: xunp:272; X64:       # %bb.0: # %entry273; X64-NEXT:    movl (%rdi), %eax274; X64-NEXT:    roll $25, %eax275; X64-NEXT:    retq276;277; SHLD64-LABEL: xunp:278; SHLD64:       # %bb.0: # %entry279; SHLD64-NEXT:    movl (%rdi), %eax280; SHLD64-NEXT:    shldl $25, %eax, %eax281; SHLD64-NEXT:    retq282;283; BMI264-LABEL: xunp:284; BMI264:       # %bb.0: # %entry285; BMI264-NEXT:    rorxl $7, (%rdi), %eax286; BMI264-NEXT:    retq287entry:288	%x = load i32, ptr %p289	%a = lshr i32 %x, 7290	%b = shl i32 %x, 25291	%c = or i32 %a, %b292	ret i32 %c293}294 295define i32 @xbu(i32 %x, i32 %y, i32 %z) nounwind readnone {296; CHECK32-LABEL: xbu:297; CHECK32:       # %bb.0: # %entry298; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %ecx299; CHECK32-NEXT:    movl {{[0-9]+}}(%esp), %eax300; CHECK32-NEXT:    shldl $25, %ecx, %eax301; CHECK32-NEXT:    retl302;303; CHECK64-LABEL: xbu:304; CHECK64:       # %bb.0: # %entry305; CHECK64-NEXT:    movl %edi, %eax306; CHECK64-NEXT:    shldl $25, %esi, %eax307; CHECK64-NEXT:    retq308entry:309	%0 = lshr i32 %y, 7310	%1 = shl i32 %x, 25311	%2 = or i32 %0, %1312	ret i32 %2313}314 315define i32 @fshl(i32 %x) nounwind {316; X86-LABEL: fshl:317; X86:       # %bb.0:318; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax319; X86-NEXT:    roll $7, %eax320; X86-NEXT:    retl321;322; SHLD-LABEL: fshl:323; SHLD:       # %bb.0:324; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax325; SHLD-NEXT:    shldl $7, %eax, %eax326; SHLD-NEXT:    retl327;328; BMI2-LABEL: fshl:329; BMI2:       # %bb.0:330; BMI2-NEXT:    rorxl $25, {{[0-9]+}}(%esp), %eax331; BMI2-NEXT:    retl332;333; X64-LABEL: fshl:334; X64:       # %bb.0:335; X64-NEXT:    movl %edi, %eax336; X64-NEXT:    roll $7, %eax337; X64-NEXT:    retq338;339; SHLD64-LABEL: fshl:340; SHLD64:       # %bb.0:341; SHLD64-NEXT:    movl %edi, %eax342; SHLD64-NEXT:    shldl $7, %eax, %eax343; SHLD64-NEXT:    retq344;345; BMI264-LABEL: fshl:346; BMI264:       # %bb.0:347; BMI264-NEXT:    rorxl $25, %edi, %eax348; BMI264-NEXT:    retq349  %f = call i32 @llvm.fshl.i32(i32 %x, i32 %x, i32 7)350  ret i32 %f351}352declare i32 @llvm.fshl.i32(i32, i32, i32)353 354define i32 @fshl1(i32 %x) nounwind {355; X86-LABEL: fshl1:356; X86:       # %bb.0:357; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax358; X86-NEXT:    roll %eax359; X86-NEXT:    retl360;361; SHLD-LABEL: fshl1:362; SHLD:       # %bb.0:363; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax364; SHLD-NEXT:    shldl $1, %eax, %eax365; SHLD-NEXT:    retl366;367; BMI2-LABEL: fshl1:368; BMI2:       # %bb.0:369; BMI2-NEXT:    rorxl $31, {{[0-9]+}}(%esp), %eax370; BMI2-NEXT:    retl371;372; X64-LABEL: fshl1:373; X64:       # %bb.0:374; X64-NEXT:    movl %edi, %eax375; X64-NEXT:    roll %eax376; X64-NEXT:    retq377;378; SHLD64-LABEL: fshl1:379; SHLD64:       # %bb.0:380; SHLD64-NEXT:    movl %edi, %eax381; SHLD64-NEXT:    shldl $1, %eax, %eax382; SHLD64-NEXT:    retq383;384; BMI264-LABEL: fshl1:385; BMI264:       # %bb.0:386; BMI264-NEXT:    rorxl $31, %edi, %eax387; BMI264-NEXT:    retq388  %f = call i32 @llvm.fshl.i32(i32 %x, i32 %x, i32 1)389  ret i32 %f390}391 392define i32 @fshl31(i32 %x) nounwind {393; X86-LABEL: fshl31:394; X86:       # %bb.0:395; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax396; X86-NEXT:    rorl %eax397; X86-NEXT:    retl398;399; SHLD-LABEL: fshl31:400; SHLD:       # %bb.0:401; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax402; SHLD-NEXT:    shldl $31, %eax, %eax403; SHLD-NEXT:    retl404;405; BMI2-LABEL: fshl31:406; BMI2:       # %bb.0:407; BMI2-NEXT:    rorxl $1, {{[0-9]+}}(%esp), %eax408; BMI2-NEXT:    retl409;410; X64-LABEL: fshl31:411; X64:       # %bb.0:412; X64-NEXT:    movl %edi, %eax413; X64-NEXT:    rorl %eax414; X64-NEXT:    retq415;416; SHLD64-LABEL: fshl31:417; SHLD64:       # %bb.0:418; SHLD64-NEXT:    movl %edi, %eax419; SHLD64-NEXT:    shldl $31, %eax, %eax420; SHLD64-NEXT:    retq421;422; BMI264-LABEL: fshl31:423; BMI264:       # %bb.0:424; BMI264-NEXT:    rorxl $1, %edi, %eax425; BMI264-NEXT:    retq426  %f = call i32 @llvm.fshl.i32(i32 %x, i32 %x, i32 31)427  ret i32 %f428}429 430define i32 @fshl_load(ptr %p) nounwind {431; X86-LABEL: fshl_load:432; X86:       # %bb.0:433; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax434; X86-NEXT:    movl (%eax), %eax435; X86-NEXT:    roll $7, %eax436; X86-NEXT:    retl437;438; SHLD-LABEL: fshl_load:439; SHLD:       # %bb.0:440; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax441; SHLD-NEXT:    movl (%eax), %eax442; SHLD-NEXT:    shldl $7, %eax, %eax443; SHLD-NEXT:    retl444;445; BMI2-LABEL: fshl_load:446; BMI2:       # %bb.0:447; BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax448; BMI2-NEXT:    rorxl $25, (%eax), %eax449; BMI2-NEXT:    retl450;451; X64-LABEL: fshl_load:452; X64:       # %bb.0:453; X64-NEXT:    movl (%rdi), %eax454; X64-NEXT:    roll $7, %eax455; X64-NEXT:    retq456;457; SHLD64-LABEL: fshl_load:458; SHLD64:       # %bb.0:459; SHLD64-NEXT:    movl (%rdi), %eax460; SHLD64-NEXT:    shldl $7, %eax, %eax461; SHLD64-NEXT:    retq462;463; BMI264-LABEL: fshl_load:464; BMI264:       # %bb.0:465; BMI264-NEXT:    rorxl $25, (%rdi), %eax466; BMI264-NEXT:    retq467  %x = load i32, ptr %p468  %f = call i32 @llvm.fshl.i32(i32 %x, i32 %x, i32 7)469  ret i32 %f470}471 472define i32 @fshr(i32 %x) nounwind {473; X86-LABEL: fshr:474; X86:       # %bb.0:475; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax476; X86-NEXT:    rorl $7, %eax477; X86-NEXT:    retl478;479; SHLD-LABEL: fshr:480; SHLD:       # %bb.0:481; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax482; SHLD-NEXT:    shrdl $7, %eax, %eax483; SHLD-NEXT:    retl484;485; BMI2-LABEL: fshr:486; BMI2:       # %bb.0:487; BMI2-NEXT:    rorxl $7, {{[0-9]+}}(%esp), %eax488; BMI2-NEXT:    retl489;490; X64-LABEL: fshr:491; X64:       # %bb.0:492; X64-NEXT:    movl %edi, %eax493; X64-NEXT:    rorl $7, %eax494; X64-NEXT:    retq495;496; SHLD64-LABEL: fshr:497; SHLD64:       # %bb.0:498; SHLD64-NEXT:    movl %edi, %eax499; SHLD64-NEXT:    shrdl $7, %eax, %eax500; SHLD64-NEXT:    retq501;502; BMI264-LABEL: fshr:503; BMI264:       # %bb.0:504; BMI264-NEXT:    rorxl $7, %edi, %eax505; BMI264-NEXT:    retq506  %f = call i32 @llvm.fshr.i32(i32 %x, i32 %x, i32 7)507  ret i32 %f508}509declare i32 @llvm.fshr.i32(i32, i32, i32)510 511define i32 @fshr1(i32 %x) nounwind {512; X86-LABEL: fshr1:513; X86:       # %bb.0:514; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax515; X86-NEXT:    rorl %eax516; X86-NEXT:    retl517;518; SHLD-LABEL: fshr1:519; SHLD:       # %bb.0:520; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax521; SHLD-NEXT:    shrdl $1, %eax, %eax522; SHLD-NEXT:    retl523;524; BMI2-LABEL: fshr1:525; BMI2:       # %bb.0:526; BMI2-NEXT:    rorxl $1, {{[0-9]+}}(%esp), %eax527; BMI2-NEXT:    retl528;529; X64-LABEL: fshr1:530; X64:       # %bb.0:531; X64-NEXT:    movl %edi, %eax532; X64-NEXT:    rorl %eax533; X64-NEXT:    retq534;535; SHLD64-LABEL: fshr1:536; SHLD64:       # %bb.0:537; SHLD64-NEXT:    movl %edi, %eax538; SHLD64-NEXT:    shrdl $1, %eax, %eax539; SHLD64-NEXT:    retq540;541; BMI264-LABEL: fshr1:542; BMI264:       # %bb.0:543; BMI264-NEXT:    rorxl $1, %edi, %eax544; BMI264-NEXT:    retq545  %f = call i32 @llvm.fshr.i32(i32 %x, i32 %x, i32 1)546  ret i32 %f547}548 549define i32 @fshr31(i32 %x) nounwind {550; X86-LABEL: fshr31:551; X86:       # %bb.0:552; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax553; X86-NEXT:    roll %eax554; X86-NEXT:    retl555;556; SHLD-LABEL: fshr31:557; SHLD:       # %bb.0:558; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax559; SHLD-NEXT:    shrdl $31, %eax, %eax560; SHLD-NEXT:    retl561;562; BMI2-LABEL: fshr31:563; BMI2:       # %bb.0:564; BMI2-NEXT:    rorxl $31, {{[0-9]+}}(%esp), %eax565; BMI2-NEXT:    retl566;567; X64-LABEL: fshr31:568; X64:       # %bb.0:569; X64-NEXT:    movl %edi, %eax570; X64-NEXT:    roll %eax571; X64-NEXT:    retq572;573; SHLD64-LABEL: fshr31:574; SHLD64:       # %bb.0:575; SHLD64-NEXT:    movl %edi, %eax576; SHLD64-NEXT:    shrdl $31, %eax, %eax577; SHLD64-NEXT:    retq578;579; BMI264-LABEL: fshr31:580; BMI264:       # %bb.0:581; BMI264-NEXT:    rorxl $31, %edi, %eax582; BMI264-NEXT:    retq583  %f = call i32 @llvm.fshr.i32(i32 %x, i32 %x, i32 31)584  ret i32 %f585}586 587define i32 @fshr_load(ptr %p) nounwind {588; X86-LABEL: fshr_load:589; X86:       # %bb.0:590; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax591; X86-NEXT:    movl (%eax), %eax592; X86-NEXT:    rorl $7, %eax593; X86-NEXT:    retl594;595; SHLD-LABEL: fshr_load:596; SHLD:       # %bb.0:597; SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax598; SHLD-NEXT:    movl (%eax), %eax599; SHLD-NEXT:    shrdl $7, %eax, %eax600; SHLD-NEXT:    retl601;602; BMI2-LABEL: fshr_load:603; BMI2:       # %bb.0:604; BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax605; BMI2-NEXT:    rorxl $7, (%eax), %eax606; BMI2-NEXT:    retl607;608; X64-LABEL: fshr_load:609; X64:       # %bb.0:610; X64-NEXT:    movl (%rdi), %eax611; X64-NEXT:    rorl $7, %eax612; X64-NEXT:    retq613;614; SHLD64-LABEL: fshr_load:615; SHLD64:       # %bb.0:616; SHLD64-NEXT:    movl (%rdi), %eax617; SHLD64-NEXT:    shrdl $7, %eax, %eax618; SHLD64-NEXT:    retq619;620; BMI264-LABEL: fshr_load:621; BMI264:       # %bb.0:622; BMI264-NEXT:    rorxl $7, (%rdi), %eax623; BMI264-NEXT:    retq624  %x = load i32, ptr %p625  %f = call i32 @llvm.fshr.i32(i32 %x, i32 %x, i32 7)626  ret i32 %f627}628