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