531 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 4define i8 @sar8m1(ptr %ptr) {5; CHECK-LABEL: sar8m1:6; CHECK: # %bb.0: # %entry7; CHECK-NEXT: sarb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x3f]8; CHECK-NEXT: retq # encoding: [0xc3]9entry:10 %a = load i8, ptr %ptr11 %sar = ashr i8 %a, 112 ret i8 %sar13}14 15define i16 @sar16m1(ptr %ptr) {16; CHECK-LABEL: sar16m1:17; CHECK: # %bb.0: # %entry18; CHECK-NEXT: sarw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x3f]19; CHECK-NEXT: retq # encoding: [0xc3]20entry:21 %a = load i16, ptr %ptr22 %sar = ashr i16 %a, 123 ret i16 %sar24}25 26define i32 @sar32m1(ptr %ptr) {27; CHECK-LABEL: sar32m1:28; CHECK: # %bb.0: # %entry29; CHECK-NEXT: sarl (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x3f]30; CHECK-NEXT: retq # encoding: [0xc3]31entry:32 %a = load i32, ptr %ptr33 %sar = ashr i32 %a, 134 ret i32 %sar35}36 37define i64 @sar64m1(ptr %ptr) {38; CHECK-LABEL: sar64m1:39; CHECK: # %bb.0: # %entry40; CHECK-NEXT: sarq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x3f]41; CHECK-NEXT: retq # encoding: [0xc3]42entry:43 %a = load i64, ptr %ptr44 %sar = ashr i64 %a, 145 ret i64 %sar46}47 48define i8 @sar8mcl(ptr %ptr, i8 %cl) {49; CHECK-LABEL: sar8mcl:50; CHECK: # %bb.0: # %entry51; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]52; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx53; CHECK-NEXT: sarb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x3f]54; CHECK-NEXT: retq # encoding: [0xc3]55entry:56 %a = load i8, ptr %ptr57 %sar = ashr i8 %a, %cl58 ret i8 %sar59}60 61define i8 @sar8mcl_mask(ptr %ptr, i8 %cl) {62; CHECK-LABEL: sar8mcl_mask:63; CHECK: # %bb.0: # %entry64; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]65; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx66; CHECK-NEXT: sarb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x3f]67; CHECK-NEXT: retq # encoding: [0xc3]68entry:69 %a = load i8, ptr %ptr70 %shamt = and i8 %cl, 3171 %sar = ashr i8 %a, %shamt72 ret i8 %sar73}74 75define i16 @sar16mcl(ptr %ptr, i16 %cl) {76; CHECK-LABEL: sar16mcl:77; CHECK: # %bb.0: # %entry78; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]79; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx80; CHECK-NEXT: sarw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x3f]81; CHECK-NEXT: retq # encoding: [0xc3]82entry:83 %a = load i16, ptr %ptr84 %sar = ashr i16 %a, %cl85 ret i16 %sar86}87 88define i16 @sar16mcl_mask(ptr %ptr, i16 %cl) {89; CHECK-LABEL: sar16mcl_mask:90; CHECK: # %bb.0: # %entry91; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]92; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx93; CHECK-NEXT: sarw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x3f]94; CHECK-NEXT: retq # encoding: [0xc3]95entry:96 %a = load i16, ptr %ptr97 %shamt = and i16 %cl, 3198 %sar = ashr i16 %a, %shamt99 ret i16 %sar100}101 102define i32 @sar32mcl(ptr %ptr, i32 %cl) {103; CHECK-LABEL: sar32mcl:104; CHECK: # %bb.0: # %entry105; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]106; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx107; CHECK-NEXT: sarl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x3f]108; CHECK-NEXT: retq # encoding: [0xc3]109entry:110 %a = load i32, ptr %ptr111 %sar = ashr i32 %a, %cl112 ret i32 %sar113}114 115define i32 @sar32mcl_mask(ptr %ptr, i32 %cl) {116; CHECK-LABEL: sar32mcl_mask:117; CHECK: # %bb.0: # %entry118; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]119; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx120; CHECK-NEXT: sarl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x3f]121; CHECK-NEXT: retq # encoding: [0xc3]122entry:123 %a = load i32, ptr %ptr124 %shamt = and i32 %cl, 31125 %sar = ashr i32 %a, %shamt126 ret i32 %sar127}128 129define i64 @sar64mcl(ptr %ptr, i64 %cl) {130; CHECK-LABEL: sar64mcl:131; CHECK: # %bb.0: # %entry132; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]133; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx134; CHECK-NEXT: sarq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x3f]135; CHECK-NEXT: retq # encoding: [0xc3]136entry:137 %a = load i64, ptr %ptr138 %sar = ashr i64 %a, %cl139 ret i64 %sar140}141 142define i64 @sar64mcl_mask(ptr %ptr, i64 %cl) {143; CHECK-LABEL: sar64mcl_mask:144; CHECK: # %bb.0: # %entry145; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]146; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx147; CHECK-NEXT: sarq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x3f]148; CHECK-NEXT: retq # encoding: [0xc3]149entry:150 %a = load i64, ptr %ptr151 %shamt = and i64 %cl, 63152 %sar = ashr i64 %a, %shamt153 ret i64 %sar154}155 156define i8 @sar8mi(ptr %ptr) {157; CHECK-LABEL: sar8mi:158; CHECK: # %bb.0: # %entry159; CHECK-NEXT: sarb $4, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x3f,0x04]160; CHECK-NEXT: retq # encoding: [0xc3]161entry:162 %a = load i8, ptr %ptr163 %sar = ashr i8 %a, 4164 ret i8 %sar165}166 167define i16 @sar16mi(ptr %ptr) {168; CHECK-LABEL: sar16mi:169; CHECK: # %bb.0: # %entry170; CHECK-NEXT: sarw $4, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x3f,0x04]171; CHECK-NEXT: retq # encoding: [0xc3]172entry:173 %a = load i16, ptr %ptr174 %sar = ashr i16 %a, 4175 ret i16 %sar176}177 178define i32 @sar32mi(ptr %ptr) {179; CHECK-LABEL: sar32mi:180; CHECK: # %bb.0: # %entry181; CHECK-NEXT: sarl $4, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x3f,0x04]182; CHECK-NEXT: retq # encoding: [0xc3]183entry:184 %a = load i32, ptr %ptr185 %sar = ashr i32 %a, 4186 ret i32 %sar187}188 189define i64 @sar64mi(ptr %ptr) {190; CHECK-LABEL: sar64mi:191; CHECK: # %bb.0: # %entry192; CHECK-NEXT: sarq $4, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x3f,0x04]193; CHECK-NEXT: retq # encoding: [0xc3]194entry:195 %a = load i64, ptr %ptr196 %sar = ashr i64 %a, 4197 ret i64 %sar198}199 200define i8 @sar8r1(i8 noundef %a) {201; CHECK-LABEL: sar8r1:202; CHECK: # %bb.0: # %entry203; CHECK-NEXT: sarb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xff]204; CHECK-NEXT: retq # encoding: [0xc3]205entry:206 %sar = ashr i8 %a, 1207 ret i8 %sar208}209 210define i16 @sar16r1(i16 noundef %a) {211; CHECK-LABEL: sar16r1:212; CHECK: # %bb.0: # %entry213; CHECK-NEXT: sarw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xff]214; CHECK-NEXT: retq # encoding: [0xc3]215entry:216 %sar = ashr i16 %a, 1217 ret i16 %sar218}219 220define i32 @sar32r1(i32 noundef %a) {221; CHECK-LABEL: sar32r1:222; CHECK: # %bb.0: # %entry223; CHECK-NEXT: sarl %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xff]224; CHECK-NEXT: retq # encoding: [0xc3]225entry:226 %sar = ashr i32 %a, 1227 ret i32 %sar228}229 230define i64 @sar64r1(i64 noundef %a) {231; CHECK-LABEL: sar64r1:232; CHECK: # %bb.0: # %entry233; CHECK-NEXT: sarq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xff]234; CHECK-NEXT: retq # encoding: [0xc3]235entry:236 %sar = ashr i64 %a, 1237 ret i64 %sar238}239 240define i8 @sar8rcl(i8 noundef %a, i8 %cl) {241; CHECK-LABEL: sar8rcl:242; CHECK: # %bb.0: # %entry243; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]244; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx245; CHECK-NEXT: sarb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xff]246; CHECK-NEXT: retq # encoding: [0xc3]247entry:248 %sar = ashr i8 %a, %cl249 ret i8 %sar250}251 252define i8 @sar8rcl_mask(i8 noundef %a, i8 %cl) {253; CHECK-LABEL: sar8rcl_mask:254; CHECK: # %bb.0: # %entry255; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]256; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx257; CHECK-NEXT: sarb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xff]258; CHECK-NEXT: retq # encoding: [0xc3]259entry:260 %shamt = and i8 %cl, 31261 %sar = ashr i8 %a, %shamt262 ret i8 %sar263}264 265define i16 @sar16rcl(i16 noundef %a, i16 %cl) {266; CHECK-LABEL: sar16rcl:267; CHECK: # %bb.0: # %entry268; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]269; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx270; CHECK-NEXT: sarw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xff]271; CHECK-NEXT: retq # encoding: [0xc3]272entry:273 %sar = ashr i16 %a, %cl274 ret i16 %sar275}276 277define i16 @sar16rcl_mask(i16 noundef %a, i16 %cl) {278; CHECK-LABEL: sar16rcl_mask:279; CHECK: # %bb.0: # %entry280; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]281; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx282; CHECK-NEXT: sarw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xff]283; CHECK-NEXT: retq # encoding: [0xc3]284entry:285 %shamt = and i16 %cl, 31286 %sar = ashr i16 %a, %shamt287 ret i16 %sar288}289 290define i32 @sar32rcl(i32 noundef %a, i32 %cl) {291; CHECK-LABEL: sar32rcl:292; CHECK: # %bb.0: # %entry293; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]294; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx295; CHECK-NEXT: sarl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xff]296; CHECK-NEXT: retq # encoding: [0xc3]297entry:298 %sar = ashr i32 %a, %cl299 ret i32 %sar300}301 302define i32 @sar32rcl_mask(i32 noundef %a, i32 %cl) {303; CHECK-LABEL: sar32rcl_mask:304; CHECK: # %bb.0: # %entry305; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]306; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx307; CHECK-NEXT: sarl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xff]308; CHECK-NEXT: retq # encoding: [0xc3]309entry:310 %shamt = and i32 %cl, 31311 %sar = ashr i32 %a, %shamt312 ret i32 %sar313}314 315define i64 @sar64rcl(i64 noundef %a, i64 %cl) {316; CHECK-LABEL: sar64rcl:317; CHECK: # %bb.0: # %entry318; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]319; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx320; CHECK-NEXT: sarq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xff]321; CHECK-NEXT: retq # encoding: [0xc3]322entry:323 %sar = ashr i64 %a, %cl324 ret i64 %sar325}326 327define i64 @sar64rcl_mask(i64 noundef %a, i64 %cl) {328; CHECK-LABEL: sar64rcl_mask:329; CHECK: # %bb.0: # %entry330; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]331; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx332; CHECK-NEXT: sarq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xff]333; CHECK-NEXT: retq # encoding: [0xc3]334entry:335 %shamt = and i64 %cl, 63336 %sar = ashr i64 %a, %shamt337 ret i64 %sar338}339 340define i8 @sar8ri(i8 noundef %a) {341; CHECK-LABEL: sar8ri:342; CHECK: # %bb.0: # %entry343; CHECK-NEXT: sarb $4, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xff,0x04]344; CHECK-NEXT: retq # encoding: [0xc3]345entry:346 %sar = ashr i8 %a, 4347 ret i8 %sar348}349 350define i16 @sar16ri(i16 noundef %a) {351; CHECK-LABEL: sar16ri:352; CHECK: # %bb.0: # %entry353; CHECK-NEXT: sarw $4, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xff,0x04]354; CHECK-NEXT: retq # encoding: [0xc3]355entry:356 %sar = ashr i16 %a, 4357 ret i16 %sar358}359 360define i32 @sar32ri(i32 noundef %a) {361; CHECK-LABEL: sar32ri:362; CHECK: # %bb.0: # %entry363; CHECK-NEXT: sarl $4, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xff,0x04]364; CHECK-NEXT: retq # encoding: [0xc3]365entry:366 %sar = ashr i32 %a, 4367 ret i32 %sar368}369 370define i64 @sar64ri(i64 noundef %a) {371; CHECK-LABEL: sar64ri:372; CHECK: # %bb.0: # %entry373; CHECK-NEXT: sarq $4, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xff,0x04]374; CHECK-NEXT: retq # encoding: [0xc3]375entry:376 %sar = ashr i64 %a, 4377 ret i64 %sar378}379 380define void @sar8m1_legacy(ptr %ptr) {381; CHECK-LABEL: sar8m1_legacy:382; CHECK: # %bb.0: # %entry383; CHECK-NEXT: sarb (%rdi) # encoding: [0xd0,0x3f]384; CHECK-NEXT: retq # encoding: [0xc3]385entry:386 %a = load i8, ptr %ptr387 %sar = ashr i8 %a, 1388 store i8 %sar, ptr %ptr389 ret void390}391 392define void @sar16m1_legacy(ptr %ptr) {393; CHECK-LABEL: sar16m1_legacy:394; CHECK: # %bb.0: # %entry395; CHECK-NEXT: sarw (%rdi) # encoding: [0x66,0xd1,0x3f]396; CHECK-NEXT: retq # encoding: [0xc3]397entry:398 %a = load i16, ptr %ptr399 %sar = ashr i16 %a, 1400 store i16 %sar, ptr %ptr401 ret void402}403 404define void @sar32m1_legacy(ptr %ptr) {405; CHECK-LABEL: sar32m1_legacy:406; CHECK: # %bb.0: # %entry407; CHECK-NEXT: sarl (%rdi) # encoding: [0xd1,0x3f]408; CHECK-NEXT: retq # encoding: [0xc3]409entry:410 %a = load i32, ptr %ptr411 %sar = ashr i32 %a, 1412 store i32 %sar, ptr %ptr413 ret void414}415 416define void @sar64m1_legacy(ptr %ptr) {417; CHECK-LABEL: sar64m1_legacy:418; CHECK: # %bb.0: # %entry419; CHECK-NEXT: sarq (%rdi) # encoding: [0x48,0xd1,0x3f]420; CHECK-NEXT: retq # encoding: [0xc3]421entry:422 %a = load i64, ptr %ptr423 %sar = ashr i64 %a, 1424 store i64 %sar, ptr %ptr425 ret void426}427 428define void @sar8mcl_legacy(ptr %ptr, i8 %cl) {429; CHECK-LABEL: sar8mcl_legacy:430; CHECK: # %bb.0: # %entry431; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]432; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx433; CHECK-NEXT: sarb %cl, (%rdi) # encoding: [0xd2,0x3f]434; CHECK-NEXT: retq # encoding: [0xc3]435entry:436 %a = load i8, ptr %ptr437 %sar = ashr i8 %a, %cl438 store i8 %sar, ptr %ptr439 ret void440}441 442define void @sar16mcl_legacy(ptr %ptr, i16 %cl) {443; CHECK-LABEL: sar16mcl_legacy:444; CHECK: # %bb.0: # %entry445; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]446; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx447; CHECK-NEXT: sarw %cl, (%rdi) # encoding: [0x66,0xd3,0x3f]448; CHECK-NEXT: retq # encoding: [0xc3]449entry:450 %a = load i16, ptr %ptr451 %sar = ashr i16 %a, %cl452 store i16 %sar, ptr %ptr453 ret void454}455 456define void @sar32mcl_legacy(ptr %ptr, i32 %cl) {457; CHECK-LABEL: sar32mcl_legacy:458; CHECK: # %bb.0: # %entry459; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]460; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx461; CHECK-NEXT: sarl %cl, (%rdi) # encoding: [0xd3,0x3f]462; CHECK-NEXT: retq # encoding: [0xc3]463entry:464 %a = load i32, ptr %ptr465 %sar = ashr i32 %a, %cl466 store i32 %sar, ptr %ptr467 ret void468}469 470define void @sar64mcl_legacy(ptr %ptr, i64 %cl) {471; CHECK-LABEL: sar64mcl_legacy:472; CHECK: # %bb.0: # %entry473; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]474; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx475; CHECK-NEXT: sarq %cl, (%rdi) # encoding: [0x48,0xd3,0x3f]476; CHECK-NEXT: retq # encoding: [0xc3]477entry:478 %a = load i64, ptr %ptr479 %sar = ashr i64 %a, %cl480 store i64 %sar, ptr %ptr481 ret void482}483 484define void @sar8mi_legacy(ptr %ptr) {485; CHECK-LABEL: sar8mi_legacy:486; CHECK: # %bb.0: # %entry487; CHECK-NEXT: sarb $4, (%rdi) # encoding: [0xc0,0x3f,0x04]488; CHECK-NEXT: retq # encoding: [0xc3]489entry:490 %a = load i8, ptr %ptr491 %sar = ashr i8 %a, 4492 store i8 %sar, ptr %ptr493 ret void494}495 496define void @sar16mi_legacy(ptr %ptr) {497; CHECK-LABEL: sar16mi_legacy:498; CHECK: # %bb.0: # %entry499; CHECK-NEXT: sarw $4, (%rdi) # encoding: [0x66,0xc1,0x3f,0x04]500; CHECK-NEXT: retq # encoding: [0xc3]501entry:502 %a = load i16, ptr %ptr503 %sar = ashr i16 %a, 4504 store i16 %sar, ptr %ptr505 ret void506}507 508define void @sar32mi_legacy(ptr %ptr) {509; CHECK-LABEL: sar32mi_legacy:510; CHECK: # %bb.0: # %entry511; CHECK-NEXT: sarl $4, (%rdi) # encoding: [0xc1,0x3f,0x04]512; CHECK-NEXT: retq # encoding: [0xc3]513entry:514 %a = load i32, ptr %ptr515 %sar = ashr i32 %a, 4516 store i32 %sar, ptr %ptr517 ret void518}519 520define void @sar64mi_legacy(ptr %ptr) {521; CHECK-LABEL: sar64mi_legacy:522; CHECK: # %bb.0: # %entry523; CHECK-NEXT: sarq $4, (%rdi) # encoding: [0x48,0xc1,0x3f,0x04]524; CHECK-NEXT: retq # encoding: [0xc3]525entry:526 %a = load i64, ptr %ptr527 %sar = ashr i64 %a, 4528 store i64 %sar, ptr %ptr529 ret void530}531