brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.6 KiB · b82000b Raw
793 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs --show-mc-encoding | FileCheck %s3; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -verify-machineinstrs --show-mc-encoding | FileCheck --check-prefix=NF %s4; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd,nf -x86-enable-apx-for-relocation=true -verify-machineinstrs --show-mc-encoding | FileCheck --check-prefix=NF %s5 6define i8 @shr8m1(ptr %ptr) {7; CHECK-LABEL: shr8m1:8; CHECK:       # %bb.0: # %entry9; CHECK-NEXT:    shrb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x2f]10; CHECK-NEXT:    retq # encoding: [0xc3]11;12; NF-LABEL: shr8m1:13; NF:       # %bb.0: # %entry14; NF-NEXT:    {nf} shrb (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd0,0x2f]15; NF-NEXT:    retq # encoding: [0xc3]16entry:17  %a = load i8, ptr %ptr18  %shr = lshr i8 %a, 119  ret i8 %shr20}21 22define i16 @shr16m1(ptr %ptr) {23; CHECK-LABEL: shr16m1:24; CHECK:       # %bb.0: # %entry25; CHECK-NEXT:    shrw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x2f]26; CHECK-NEXT:    retq # encoding: [0xc3]27;28; NF-LABEL: shr16m1:29; NF:       # %bb.0: # %entry30; NF-NEXT:    {nf} shrw (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd1,0x2f]31; NF-NEXT:    retq # encoding: [0xc3]32entry:33  %a = load i16, ptr %ptr34  %shr = lshr i16 %a, 135  ret i16 %shr36}37 38define i32 @shr32m1(ptr %ptr) {39; CHECK-LABEL: shr32m1:40; CHECK:       # %bb.0: # %entry41; CHECK-NEXT:    shrl (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x2f]42; CHECK-NEXT:    retq # encoding: [0xc3]43;44; NF-LABEL: shr32m1:45; NF:       # %bb.0: # %entry46; NF-NEXT:    {nf} shrl (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd1,0x2f]47; NF-NEXT:    retq # encoding: [0xc3]48entry:49  %a = load i32, ptr %ptr50  %shr = lshr i32 %a, 151  ret i32 %shr52}53 54define i64 @shr64m1(ptr %ptr) {55; CHECK-LABEL: shr64m1:56; CHECK:       # %bb.0: # %entry57; CHECK-NEXT:    shrq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x2f]58; CHECK-NEXT:    retq # encoding: [0xc3]59;60; NF-LABEL: shr64m1:61; NF:       # %bb.0: # %entry62; NF-NEXT:    {nf} shrq (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd1,0x2f]63; NF-NEXT:    retq # encoding: [0xc3]64entry:65  %a = load i64, ptr %ptr66  %shr = lshr i64 %a, 167  ret i64 %shr68}69 70define i8 @shr8mcl(ptr %ptr, i8 %cl) {71; CHECK-LABEL: shr8mcl:72; CHECK:       # %bb.0: # %entry73; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]74; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx75; CHECK-NEXT:    shrb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x2f]76; CHECK-NEXT:    retq # encoding: [0xc3]77;78; NF-LABEL: shr8mcl:79; NF:       # %bb.0: # %entry80; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]81; NF-NEXT:    # kill: def $cl killed $cl killed $ecx82; NF-NEXT:    {nf} shrb %cl, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0x2f]83; NF-NEXT:    retq # encoding: [0xc3]84entry:85  %a = load i8, ptr %ptr86  %shr = lshr i8 %a, %cl87  ret i8 %shr88}89 90define i8 @shr8mcl_mask(ptr %ptr, i8 %cl) {91; CHECK-LABEL: shr8mcl_mask:92; CHECK:       # %bb.0: # %entry93; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]94; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx95; CHECK-NEXT:    shrb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x2f]96; CHECK-NEXT:    retq # encoding: [0xc3]97;98; NF-LABEL: shr8mcl_mask:99; NF:       # %bb.0: # %entry100; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]101; NF-NEXT:    # kill: def $cl killed $cl killed $ecx102; NF-NEXT:    {nf} shrb %cl, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0x2f]103; NF-NEXT:    retq # encoding: [0xc3]104entry:105  %a = load i8, ptr %ptr106  %shamt = and i8 %cl, 31107  %shr = lshr i8 %a, %shamt108  ret i8 %shr109}110 111define i16 @shr16mcl(ptr %ptr, i16 %cl) {112; CHECK-LABEL: shr16mcl:113; CHECK:       # %bb.0: # %entry114; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]115; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx116; CHECK-NEXT:    shrw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x2f]117; CHECK-NEXT:    retq # encoding: [0xc3]118;119; NF-LABEL: shr16mcl:120; NF:       # %bb.0: # %entry121; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]122; NF-NEXT:    # kill: def $cl killed $cl killed $ecx123; NF-NEXT:    {nf} shrw %cl, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0x2f]124; NF-NEXT:    retq # encoding: [0xc3]125entry:126  %a = load i16, ptr %ptr127  %shr = lshr i16 %a, %cl128  ret i16 %shr129}130 131define i16 @shr16mcl_mask(ptr %ptr, i16 %cl) {132; CHECK-LABEL: shr16mcl_mask:133; CHECK:       # %bb.0: # %entry134; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]135; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx136; CHECK-NEXT:    shrw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x2f]137; CHECK-NEXT:    retq # encoding: [0xc3]138;139; NF-LABEL: shr16mcl_mask:140; NF:       # %bb.0: # %entry141; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]142; NF-NEXT:    # kill: def $cl killed $cl killed $ecx143; NF-NEXT:    {nf} shrw %cl, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0x2f]144; NF-NEXT:    retq # encoding: [0xc3]145entry:146  %a = load i16, ptr %ptr147  %shamt = and i16 %cl, 31148  %shr = lshr i16 %a, %shamt149  ret i16 %shr150}151 152define i32 @shr32mcl(ptr %ptr, i32 %cl) {153; CHECK-LABEL: shr32mcl:154; CHECK:       # %bb.0: # %entry155; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]156; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx157; CHECK-NEXT:    shrl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x2f]158; CHECK-NEXT:    retq # encoding: [0xc3]159;160; NF-LABEL: shr32mcl:161; NF:       # %bb.0: # %entry162; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]163; NF-NEXT:    # kill: def $cl killed $cl killed $ecx164; NF-NEXT:    {nf} shrl %cl, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0x2f]165; NF-NEXT:    retq # encoding: [0xc3]166entry:167  %a = load i32, ptr %ptr168  %shr = lshr i32 %a, %cl169  ret i32 %shr170}171 172define i32 @shr32mcl_mask(ptr %ptr, i32 %cl) {173; CHECK-LABEL: shr32mcl_mask:174; CHECK:       # %bb.0: # %entry175; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]176; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx177; CHECK-NEXT:    shrl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x2f]178; CHECK-NEXT:    retq # encoding: [0xc3]179;180; NF-LABEL: shr32mcl_mask:181; NF:       # %bb.0: # %entry182; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]183; NF-NEXT:    # kill: def $cl killed $cl killed $ecx184; NF-NEXT:    {nf} shrl %cl, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0x2f]185; NF-NEXT:    retq # encoding: [0xc3]186entry:187  %a = load i32, ptr %ptr188  %shamt = and i32 %cl, 31189  %shr = lshr i32 %a, %shamt190  ret i32 %shr191}192 193define i64 @shr64mcl(ptr %ptr, i64 %cl) {194; CHECK-LABEL: shr64mcl:195; CHECK:       # %bb.0: # %entry196; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]197; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx198; CHECK-NEXT:    shrq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x2f]199; CHECK-NEXT:    retq # encoding: [0xc3]200;201; NF-LABEL: shr64mcl:202; NF:       # %bb.0: # %entry203; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]204; NF-NEXT:    # kill: def $cl killed $cl killed $rcx205; NF-NEXT:    {nf} shrq %cl, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0x2f]206; NF-NEXT:    retq # encoding: [0xc3]207entry:208  %a = load i64, ptr %ptr209  %shr = lshr i64 %a, %cl210  ret i64 %shr211}212 213define i64 @shr64mcl_mask(ptr %ptr, i64 %cl) {214; CHECK-LABEL: shr64mcl_mask:215; CHECK:       # %bb.0: # %entry216; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]217; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx218; CHECK-NEXT:    shrq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x2f]219; CHECK-NEXT:    retq # encoding: [0xc3]220;221; NF-LABEL: shr64mcl_mask:222; NF:       # %bb.0: # %entry223; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]224; NF-NEXT:    # kill: def $cl killed $cl killed $rcx225; NF-NEXT:    {nf} shrq %cl, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0x2f]226; NF-NEXT:    retq # encoding: [0xc3]227entry:228  %a = load i64, ptr %ptr229  %shamt = and i64 %cl, 63230  %shr = lshr i64 %a, %shamt231  ret i64 %shr232}233 234define i8 @shr8mi(ptr %ptr) {235; CHECK-LABEL: shr8mi:236; CHECK:       # %bb.0: # %entry237; CHECK-NEXT:    shrb $4, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x2f,0x04]238; CHECK-NEXT:    retq # encoding: [0xc3]239;240; NF-LABEL: shr8mi:241; NF:       # %bb.0: # %entry242; NF-NEXT:    {nf} shrb $4, (%rdi), %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc0,0x2f,0x04]243; NF-NEXT:    retq # encoding: [0xc3]244entry:245  %a = load i8, ptr %ptr246  %shr = lshr i8 %a, 4247  ret i8 %shr248}249 250define i16 @shr16mi(ptr %ptr) {251; CHECK-LABEL: shr16mi:252; CHECK:       # %bb.0: # %entry253; CHECK-NEXT:    shrw $4, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x2f,0x04]254; CHECK-NEXT:    retq # encoding: [0xc3]255;256; NF-LABEL: shr16mi:257; NF:       # %bb.0: # %entry258; NF-NEXT:    {nf} shrw $4, (%rdi), %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xc1,0x2f,0x04]259; NF-NEXT:    retq # encoding: [0xc3]260entry:261  %a = load i16, ptr %ptr262  %shr = lshr i16 %a, 4263  ret i16 %shr264}265 266define i32 @shr32mi(ptr %ptr) {267; CHECK-LABEL: shr32mi:268; CHECK:       # %bb.0: # %entry269; CHECK-NEXT:    shrl $4, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x2f,0x04]270; CHECK-NEXT:    retq # encoding: [0xc3]271;272; NF-LABEL: shr32mi:273; NF:       # %bb.0: # %entry274; NF-NEXT:    {nf} shrl $4, (%rdi), %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc1,0x2f,0x04]275; NF-NEXT:    retq # encoding: [0xc3]276entry:277  %a = load i32, ptr %ptr278  %shr = lshr i32 %a, 4279  ret i32 %shr280}281 282define i64 @shr64mi(ptr %ptr) {283; CHECK-LABEL: shr64mi:284; CHECK:       # %bb.0: # %entry285; CHECK-NEXT:    shrq $4, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x2f,0x04]286; CHECK-NEXT:    retq # encoding: [0xc3]287;288; NF-LABEL: shr64mi:289; NF:       # %bb.0: # %entry290; NF-NEXT:    {nf} shrq $4, (%rdi), %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xc1,0x2f,0x04]291; NF-NEXT:    retq # encoding: [0xc3]292entry:293  %a = load i64, ptr %ptr294  %shr = lshr i64 %a, 4295  ret i64 %shr296}297 298define i8 @shr8r1(i8 noundef %a) {299; CHECK-LABEL: shr8r1:300; CHECK:       # %bb.0: # %entry301; CHECK-NEXT:    shrb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xef]302; CHECK-NEXT:    retq # encoding: [0xc3]303;304; NF-LABEL: shr8r1:305; NF:       # %bb.0: # %entry306; NF-NEXT:    {nf} shrb %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd0,0xef]307; NF-NEXT:    retq # encoding: [0xc3]308entry:309  %shr = lshr i8 %a, 1310  ret i8 %shr311}312 313define i16 @shr16r1(i16 noundef %a) {314; CHECK-LABEL: shr16r1:315; CHECK:       # %bb.0: # %entry316; CHECK-NEXT:    shrw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xef]317; CHECK-NEXT:    retq # encoding: [0xc3]318;319; NF-LABEL: shr16r1:320; NF:       # %bb.0: # %entry321; NF-NEXT:    {nf} shrw %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd1,0xef]322; NF-NEXT:    retq # encoding: [0xc3]323entry:324  %shr = lshr i16 %a, 1325  ret i16 %shr326}327 328define i32 @shr32r1(i32 noundef %a) {329; CHECK-LABEL: shr32r1:330; CHECK:       # %bb.0: # %entry331; CHECK-NEXT:    shrl %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xef]332; CHECK-NEXT:    retq # encoding: [0xc3]333;334; NF-LABEL: shr32r1:335; NF:       # %bb.0: # %entry336; NF-NEXT:    {nf} shrl %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd1,0xef]337; NF-NEXT:    retq # encoding: [0xc3]338entry:339  %shr = lshr i32 %a, 1340  ret i32 %shr341}342 343define i64 @shr64r1(i64 noundef %a) {344; CHECK-LABEL: shr64r1:345; CHECK:       # %bb.0: # %entry346; CHECK-NEXT:    shrq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xef]347; CHECK-NEXT:    retq # encoding: [0xc3]348;349; NF-LABEL: shr64r1:350; NF:       # %bb.0: # %entry351; NF-NEXT:    {nf} shrq %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd1,0xef]352; NF-NEXT:    retq # encoding: [0xc3]353entry:354  %shr = lshr i64 %a, 1355  ret i64 %shr356}357 358define i8 @shr8rcl(i8 noundef %a, i8 %cl) {359; CHECK-LABEL: shr8rcl:360; CHECK:       # %bb.0: # %entry361; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]362; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx363; CHECK-NEXT:    shrb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xef]364; CHECK-NEXT:    retq # encoding: [0xc3]365;366; NF-LABEL: shr8rcl:367; NF:       # %bb.0: # %entry368; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]369; NF-NEXT:    # kill: def $cl killed $cl killed $ecx370; NF-NEXT:    {nf} shrb %cl, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0xef]371; NF-NEXT:    retq # encoding: [0xc3]372entry:373  %shr = lshr i8 %a, %cl374  ret i8 %shr375}376 377define i8 @shr8rcl_mask(i8 noundef %a, i8 %cl) {378; CHECK-LABEL: shr8rcl_mask:379; CHECK:       # %bb.0: # %entry380; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]381; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx382; CHECK-NEXT:    shrb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xef]383; CHECK-NEXT:    retq # encoding: [0xc3]384;385; NF-LABEL: shr8rcl_mask:386; NF:       # %bb.0: # %entry387; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]388; NF-NEXT:    # kill: def $cl killed $cl killed $ecx389; NF-NEXT:    {nf} shrb %cl, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd2,0xef]390; NF-NEXT:    retq # encoding: [0xc3]391entry:392  %shamt = and i8 %cl, 31393  %shr = lshr i8 %a, %shamt394  ret i8 %shr395}396 397define i16 @shr16rcl(i16 noundef %a, i16 %cl) {398; CHECK-LABEL: shr16rcl:399; CHECK:       # %bb.0: # %entry400; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]401; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx402; CHECK-NEXT:    shrw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xef]403; CHECK-NEXT:    retq # encoding: [0xc3]404;405; NF-LABEL: shr16rcl:406; NF:       # %bb.0: # %entry407; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]408; NF-NEXT:    # kill: def $cl killed $cl killed $ecx409; NF-NEXT:    {nf} shrw %cl, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0xef]410; NF-NEXT:    retq # encoding: [0xc3]411entry:412  %shr = lshr i16 %a, %cl413  ret i16 %shr414}415 416define i16 @shr16rcl_mask(i16 noundef %a, i16 %cl) {417; CHECK-LABEL: shr16rcl_mask:418; CHECK:       # %bb.0: # %entry419; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]420; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx421; CHECK-NEXT:    shrw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xef]422; CHECK-NEXT:    retq # encoding: [0xc3]423;424; NF-LABEL: shr16rcl_mask:425; NF:       # %bb.0: # %entry426; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]427; NF-NEXT:    # kill: def $cl killed $cl killed $ecx428; NF-NEXT:    {nf} shrw %cl, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xd3,0xef]429; NF-NEXT:    retq # encoding: [0xc3]430entry:431  %shamt = and i16 %cl, 31432  %shr = lshr i16 %a, %shamt433  ret i16 %shr434}435 436define i32 @shr32rcl(i32 noundef %a, i32 %cl) {437; CHECK-LABEL: shr32rcl:438; CHECK:       # %bb.0: # %entry439; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]440; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx441; CHECK-NEXT:    shrl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xef]442; CHECK-NEXT:    retq # encoding: [0xc3]443;444; NF-LABEL: shr32rcl:445; NF:       # %bb.0: # %entry446; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]447; NF-NEXT:    # kill: def $cl killed $cl killed $ecx448; NF-NEXT:    {nf} shrl %cl, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0xef]449; NF-NEXT:    retq # encoding: [0xc3]450entry:451  %shr = lshr i32 %a, %cl452  ret i32 %shr453}454 455define i32 @shr32rcl_mask(i32 noundef %a, i32 %cl) {456; CHECK-LABEL: shr32rcl_mask:457; CHECK:       # %bb.0: # %entry458; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]459; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx460; CHECK-NEXT:    shrl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xef]461; CHECK-NEXT:    retq # encoding: [0xc3]462;463; NF-LABEL: shr32rcl_mask:464; NF:       # %bb.0: # %entry465; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]466; NF-NEXT:    # kill: def $cl killed $cl killed $ecx467; NF-NEXT:    {nf} shrl %cl, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xd3,0xef]468; NF-NEXT:    retq # encoding: [0xc3]469entry:470  %shamt = and i32 %cl, 31471  %shr = lshr i32 %a, %shamt472  ret i32 %shr473}474 475define i64 @shr64rcl(i64 noundef %a, i64 %cl) {476; CHECK-LABEL: shr64rcl:477; CHECK:       # %bb.0: # %entry478; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]479; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx480; CHECK-NEXT:    shrq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xef]481; CHECK-NEXT:    retq # encoding: [0xc3]482;483; NF-LABEL: shr64rcl:484; NF:       # %bb.0: # %entry485; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]486; NF-NEXT:    # kill: def $cl killed $cl killed $rcx487; NF-NEXT:    {nf} shrq %cl, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0xef]488; NF-NEXT:    retq # encoding: [0xc3]489entry:490  %shr = lshr i64 %a, %cl491  ret i64 %shr492}493 494define i64 @shr64rcl_mask(i64 noundef %a, i64 %cl) {495; CHECK-LABEL: shr64rcl_mask:496; CHECK:       # %bb.0: # %entry497; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]498; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx499; CHECK-NEXT:    shrq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xef]500; CHECK-NEXT:    retq # encoding: [0xc3]501;502; NF-LABEL: shr64rcl_mask:503; NF:       # %bb.0: # %entry504; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]505; NF-NEXT:    # kill: def $cl killed $cl killed $rcx506; NF-NEXT:    {nf} shrq %cl, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xd3,0xef]507; NF-NEXT:    retq # encoding: [0xc3]508entry:509  %shamt = and i64 %cl, 63510  %shr = lshr i64 %a, %shamt511  ret i64 %shr512}513 514define i8 @shr8ri(i8 noundef %a) {515; CHECK-LABEL: shr8ri:516; CHECK:       # %bb.0: # %entry517; CHECK-NEXT:    shrb $4, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xef,0x04]518; CHECK-NEXT:    retq # encoding: [0xc3]519;520; NF-LABEL: shr8ri:521; NF:       # %bb.0: # %entry522; NF-NEXT:    {nf} shrb $4, %dil, %al # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc0,0xef,0x04]523; NF-NEXT:    retq # encoding: [0xc3]524entry:525  %shr = lshr i8 %a, 4526  ret i8 %shr527}528 529define i16 @shr16ri(i16 noundef %a) {530; CHECK-LABEL: shr16ri:531; CHECK:       # %bb.0: # %entry532; CHECK-NEXT:    shrw $4, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xef,0x04]533; CHECK-NEXT:    retq # encoding: [0xc3]534;535; NF-LABEL: shr16ri:536; NF:       # %bb.0: # %entry537; NF-NEXT:    {nf} shrw $4, %di, %ax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7d,0x1c,0xc1,0xef,0x04]538; NF-NEXT:    retq # encoding: [0xc3]539entry:540  %shr = lshr i16 %a, 4541  ret i16 %shr542}543 544define i32 @shr32ri(i32 noundef %a) {545; CHECK-LABEL: shr32ri:546; CHECK:       # %bb.0: # %entry547; CHECK-NEXT:    shrl $4, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xef,0x04]548; CHECK-NEXT:    retq # encoding: [0xc3]549;550; NF-LABEL: shr32ri:551; NF:       # %bb.0: # %entry552; NF-NEXT:    {nf} shrl $4, %edi, %eax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x7c,0x1c,0xc1,0xef,0x04]553; NF-NEXT:    retq # encoding: [0xc3]554entry:555  %shr = lshr i32 %a, 4556  ret i32 %shr557}558 559define i64 @shr64ri(i64 noundef %a) {560; CHECK-LABEL: shr64ri:561; CHECK:       # %bb.0: # %entry562; CHECK-NEXT:    shrq $4, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xef,0x04]563; CHECK-NEXT:    retq # encoding: [0xc3]564;565; NF-LABEL: shr64ri:566; NF:       # %bb.0: # %entry567; NF-NEXT:    {nf} shrq $4, %rdi, %rax # EVEX TO EVEX Compression encoding: [0x62,0xf4,0xfc,0x1c,0xc1,0xef,0x04]568; NF-NEXT:    retq # encoding: [0xc3]569entry:570  %shr = lshr i64 %a, 4571  ret i64 %shr572}573 574define void @shr8m1_legacy(ptr %ptr) {575; CHECK-LABEL: shr8m1_legacy:576; CHECK:       # %bb.0: # %entry577; CHECK-NEXT:    shrb (%rdi) # encoding: [0xd0,0x2f]578; CHECK-NEXT:    retq # encoding: [0xc3]579;580; NF-LABEL: shr8m1_legacy:581; NF:       # %bb.0: # %entry582; NF-NEXT:    shrb (%rdi) # encoding: [0xd0,0x2f]583; NF-NEXT:    retq # encoding: [0xc3]584entry:585  %a = load i8, ptr %ptr586  %shr = lshr i8 %a, 1587  store i8 %shr, ptr %ptr588  ret void589}590 591define void @shr16m1_legacy(ptr %ptr) {592; CHECK-LABEL: shr16m1_legacy:593; CHECK:       # %bb.0: # %entry594; CHECK-NEXT:    shrw (%rdi) # encoding: [0x66,0xd1,0x2f]595; CHECK-NEXT:    retq # encoding: [0xc3]596;597; NF-LABEL: shr16m1_legacy:598; NF:       # %bb.0: # %entry599; NF-NEXT:    shrw (%rdi) # encoding: [0x66,0xd1,0x2f]600; NF-NEXT:    retq # encoding: [0xc3]601entry:602  %a = load i16, ptr %ptr603  %shr = lshr i16 %a, 1604  store i16 %shr, ptr %ptr605  ret void606}607 608define void @shr32m1_legacy(ptr %ptr) {609; CHECK-LABEL: shr32m1_legacy:610; CHECK:       # %bb.0: # %entry611; CHECK-NEXT:    shrl (%rdi) # encoding: [0xd1,0x2f]612; CHECK-NEXT:    retq # encoding: [0xc3]613;614; NF-LABEL: shr32m1_legacy:615; NF:       # %bb.0: # %entry616; NF-NEXT:    shrl (%rdi) # encoding: [0xd1,0x2f]617; NF-NEXT:    retq # encoding: [0xc3]618entry:619  %a = load i32, ptr %ptr620  %shr = lshr i32 %a, 1621  store i32 %shr, ptr %ptr622  ret void623}624 625define void @shr64m1_legacy(ptr %ptr) {626; CHECK-LABEL: shr64m1_legacy:627; CHECK:       # %bb.0: # %entry628; CHECK-NEXT:    shrq (%rdi) # encoding: [0x48,0xd1,0x2f]629; CHECK-NEXT:    retq # encoding: [0xc3]630;631; NF-LABEL: shr64m1_legacy:632; NF:       # %bb.0: # %entry633; NF-NEXT:    shrq (%rdi) # encoding: [0x48,0xd1,0x2f]634; NF-NEXT:    retq # encoding: [0xc3]635entry:636  %a = load i64, ptr %ptr637  %shr = lshr i64 %a, 1638  store i64 %shr, ptr %ptr639  ret void640}641 642define void @shr8mi_legacy(ptr %ptr) {643; CHECK-LABEL: shr8mi_legacy:644; CHECK:       # %bb.0: # %entry645; CHECK-NEXT:    shrb $4, (%rdi) # encoding: [0xc0,0x2f,0x04]646; CHECK-NEXT:    retq # encoding: [0xc3]647;648; NF-LABEL: shr8mi_legacy:649; NF:       # %bb.0: # %entry650; NF-NEXT:    shrb $4, (%rdi) # encoding: [0xc0,0x2f,0x04]651; NF-NEXT:    retq # encoding: [0xc3]652entry:653  %a = load i8, ptr %ptr654  %shr = lshr i8 %a, 4655  store i8 %shr, ptr %ptr656  ret void657}658 659define void @shr16mi_legacy(ptr %ptr) {660; CHECK-LABEL: shr16mi_legacy:661; CHECK:       # %bb.0: # %entry662; CHECK-NEXT:    shrw $4, (%rdi) # encoding: [0x66,0xc1,0x2f,0x04]663; CHECK-NEXT:    retq # encoding: [0xc3]664;665; NF-LABEL: shr16mi_legacy:666; NF:       # %bb.0: # %entry667; NF-NEXT:    shrw $4, (%rdi) # encoding: [0x66,0xc1,0x2f,0x04]668; NF-NEXT:    retq # encoding: [0xc3]669entry:670  %a = load i16, ptr %ptr671  %shr = lshr i16 %a, 4672  store i16 %shr, ptr %ptr673  ret void674}675 676define void @shr32mi_legacy(ptr %ptr) {677; CHECK-LABEL: shr32mi_legacy:678; CHECK:       # %bb.0: # %entry679; CHECK-NEXT:    shrl $4, (%rdi) # encoding: [0xc1,0x2f,0x04]680; CHECK-NEXT:    retq # encoding: [0xc3]681;682; NF-LABEL: shr32mi_legacy:683; NF:       # %bb.0: # %entry684; NF-NEXT:    shrl $4, (%rdi) # encoding: [0xc1,0x2f,0x04]685; NF-NEXT:    retq # encoding: [0xc3]686entry:687  %a = load i32, ptr %ptr688  %shr = lshr i32 %a, 4689  store i32 %shr, ptr %ptr690  ret void691}692 693define void @shr64mi_legacy(ptr %ptr) {694; CHECK-LABEL: shr64mi_legacy:695; CHECK:       # %bb.0: # %entry696; CHECK-NEXT:    shrq $4, (%rdi) # encoding: [0x48,0xc1,0x2f,0x04]697; CHECK-NEXT:    retq # encoding: [0xc3]698;699; NF-LABEL: shr64mi_legacy:700; NF:       # %bb.0: # %entry701; NF-NEXT:    shrq $4, (%rdi) # encoding: [0x48,0xc1,0x2f,0x04]702; NF-NEXT:    retq # encoding: [0xc3]703entry:704  %a = load i64, ptr %ptr705  %shr = lshr i64 %a, 4706  store i64 %shr, ptr %ptr707  ret void708}709 710define void @shr8mcl_legacy(ptr %ptr, i8 %cl) {711; CHECK-LABEL: shr8mcl_legacy:712; CHECK:       # %bb.0: # %entry713; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]714; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx715; CHECK-NEXT:    shrb %cl, (%rdi) # encoding: [0xd2,0x2f]716; CHECK-NEXT:    retq # encoding: [0xc3]717;718; NF-LABEL: shr8mcl_legacy:719; NF:       # %bb.0: # %entry720; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]721; NF-NEXT:    # kill: def $cl killed $cl killed $ecx722; NF-NEXT:    shrb %cl, (%rdi) # encoding: [0xd2,0x2f]723; NF-NEXT:    retq # encoding: [0xc3]724entry:725  %a = load i8, ptr %ptr726  %shr = lshr i8 %a, %cl727  store i8 %shr, ptr %ptr728  ret void729}730 731define void @shr16mcl_legacy(ptr %ptr, i16 %cl) {732; CHECK-LABEL: shr16mcl_legacy:733; CHECK:       # %bb.0: # %entry734; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]735; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx736; CHECK-NEXT:    shrw %cl, (%rdi) # encoding: [0x66,0xd3,0x2f]737; CHECK-NEXT:    retq # encoding: [0xc3]738;739; NF-LABEL: shr16mcl_legacy:740; NF:       # %bb.0: # %entry741; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]742; NF-NEXT:    # kill: def $cl killed $cl killed $ecx743; NF-NEXT:    shrw %cl, (%rdi) # encoding: [0x66,0xd3,0x2f]744; NF-NEXT:    retq # encoding: [0xc3]745entry:746  %a = load i16, ptr %ptr747  %shr = lshr i16 %a, %cl748  store i16 %shr, ptr %ptr749  ret void750}751 752define void @shr32mcl_legacy(ptr %ptr, i32 %cl) {753; CHECK-LABEL: shr32mcl_legacy:754; CHECK:       # %bb.0: # %entry755; CHECK-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]756; CHECK-NEXT:    # kill: def $cl killed $cl killed $ecx757; CHECK-NEXT:    shrl %cl, (%rdi) # encoding: [0xd3,0x2f]758; CHECK-NEXT:    retq # encoding: [0xc3]759;760; NF-LABEL: shr32mcl_legacy:761; NF:       # %bb.0: # %entry762; NF-NEXT:    movl %esi, %ecx # encoding: [0x89,0xf1]763; NF-NEXT:    # kill: def $cl killed $cl killed $ecx764; NF-NEXT:    shrl %cl, (%rdi) # encoding: [0xd3,0x2f]765; NF-NEXT:    retq # encoding: [0xc3]766entry:767  %a = load i32, ptr %ptr768  %shr = lshr i32 %a, %cl769  store i32 %shr, ptr %ptr770  ret void771}772 773define void @shr64mcl_legacy(ptr %ptr, i64 %cl) {774; CHECK-LABEL: shr64mcl_legacy:775; CHECK:       # %bb.0: # %entry776; CHECK-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]777; CHECK-NEXT:    # kill: def $cl killed $cl killed $rcx778; CHECK-NEXT:    shrq %cl, (%rdi) # encoding: [0x48,0xd3,0x2f]779; CHECK-NEXT:    retq # encoding: [0xc3]780;781; NF-LABEL: shr64mcl_legacy:782; NF:       # %bb.0: # %entry783; NF-NEXT:    movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]784; NF-NEXT:    # kill: def $cl killed $cl killed $rcx785; NF-NEXT:    shrq %cl, (%rdi) # encoding: [0x48,0xd3,0x2f]786; NF-NEXT:    retq # encoding: [0xc3]787entry:788  %a = load i64, ptr %ptr789  %shr = lshr i64 %a, %cl790  store i64 %shr, ptr %ptr791  ret void792}793