583 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 @rol8m1(ptr %ptr) {5; CHECK-LABEL: rol8m1:6; CHECK: # %bb.0: # %entry7; CHECK-NEXT: rolb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x07]8; CHECK-NEXT: retq # encoding: [0xc3]9entry:10 %a = load i8, ptr %ptr11 %0 = shl i8 %a, 112 %1 = lshr i8 %a, 713 %rol = or i8 %0, %114 ret i8 %rol15}16 17define i8 @rol8m1_intrinsic(ptr %ptr) {18; CHECK-LABEL: rol8m1_intrinsic:19; CHECK: # %bb.0:20; CHECK-NEXT: rolb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x07]21; CHECK-NEXT: retq # encoding: [0xc3]22 %a = load i8, ptr %ptr23 %f = call i8 @llvm.fshr.i8(i8 %a, i8 %a, i8 7)24 ret i8 %f25}26 27define i16 @rol16m1(ptr %ptr) {28; CHECK-LABEL: rol16m1:29; CHECK: # %bb.0: # %entry30; CHECK-NEXT: rolw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x07]31; CHECK-NEXT: retq # encoding: [0xc3]32entry:33 %a = load i16, ptr %ptr34 %0 = shl i16 %a, 135 %1 = lshr i16 %a, 1536 %rol = or i16 %0, %137 ret i16 %rol38}39 40define i16 @rol16m1_intrinsic(ptr %ptr) {41; CHECK-LABEL: rol16m1_intrinsic:42; CHECK: # %bb.0:43; CHECK-NEXT: rolw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x07]44; CHECK-NEXT: retq # encoding: [0xc3]45 %a = load i16, ptr %ptr46 %f = call i16 @llvm.fshr.i16(i16 %a, i16 %a, i16 15)47 ret i16 %f48}49 50define i32 @rol32m1(ptr %ptr) {51; CHECK-LABEL: rol32m1:52; CHECK: # %bb.0: # %entry53; CHECK-NEXT: roll (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x07]54; CHECK-NEXT: retq # encoding: [0xc3]55entry:56 %a = load i32, ptr %ptr57 %0 = shl i32 %a, 158 %1 = lshr i32 %a, 3159 %rol = or i32 %0, %160 ret i32 %rol61}62 63define i32 @rol32m1_intrinsic(ptr %ptr) {64; CHECK-LABEL: rol32m1_intrinsic:65; CHECK: # %bb.0:66; CHECK-NEXT: roll (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x07]67; CHECK-NEXT: retq # encoding: [0xc3]68 %a = load i32, ptr %ptr69 %f = call i32 @llvm.fshr.i32(i32 %a, i32 %a, i32 31)70 ret i32 %f71}72 73define i64 @rol64m1(ptr %ptr) {74; CHECK-LABEL: rol64m1:75; CHECK: # %bb.0: # %entry76; CHECK-NEXT: rolq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x07]77; CHECK-NEXT: retq # encoding: [0xc3]78entry:79 %a = load i64, ptr %ptr80 %0 = shl i64 %a, 181 %1 = lshr i64 %a, 6382 %rol = or i64 %0, %183 ret i64 %rol84}85 86define i64 @rol64m1_intrinsic(ptr %ptr) {87; CHECK-LABEL: rol64m1_intrinsic:88; CHECK: # %bb.0:89; CHECK-NEXT: rolq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x07]90; CHECK-NEXT: retq # encoding: [0xc3]91 %a = load i64, ptr %ptr92 %f = call i64 @llvm.fshr.i64(i64 %a, i64 %a, i64 63)93 ret i64 %f94}95 96define i8 @rol8mcl(ptr %ptr, i8 %cl) {97; CHECK-LABEL: rol8mcl:98; CHECK: # %bb.0: # %entry99; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]100; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx101; CHECK-NEXT: rolb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x07]102; CHECK-NEXT: retq # encoding: [0xc3]103entry:104 %a = load i8, ptr %ptr105 %0 = shl i8 %a, %cl106 %1 = sub i8 8, %cl107 %2 = lshr i8 %a, %1108 %rol = or i8 %0, %2109 ret i8 %rol110}111 112define i16 @rol16mcl(ptr %ptr, i16 %cl) {113; CHECK-LABEL: rol16mcl:114; CHECK: # %bb.0: # %entry115; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]116; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx117; CHECK-NEXT: rolw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x07]118; CHECK-NEXT: retq # encoding: [0xc3]119entry:120 %a = load i16, ptr %ptr121 %0 = shl i16 %a, %cl122 %1 = sub i16 16, %cl123 %2 = lshr i16 %a, %1124 %rol = or i16 %0, %2125 ret i16 %rol126}127 128define i32 @rol32mcl(ptr %ptr, i32 %cl) {129; CHECK-LABEL: rol32mcl:130; CHECK: # %bb.0: # %entry131; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]132; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx133; CHECK-NEXT: roll %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x07]134; CHECK-NEXT: retq # encoding: [0xc3]135entry:136 %a = load i32, ptr %ptr137 %0 = shl i32 %a, %cl138 %1 = sub i32 32, %cl139 %2 = lshr i32 %a, %1140 %rol = or i32 %0, %2141 ret i32 %rol142}143 144define i64 @rol64mcl(ptr %ptr, i64 %cl) {145; CHECK-LABEL: rol64mcl:146; CHECK: # %bb.0: # %entry147; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]148; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx149; CHECK-NEXT: rolq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x07]150; CHECK-NEXT: retq # encoding: [0xc3]151entry:152 %a = load i64, ptr %ptr153 %0 = shl i64 %a, %cl154 %1 = sub i64 64, %cl155 %2 = lshr i64 %a, %1156 %rol = or i64 %0, %2157 ret i64 %rol158}159 160define i8 @rol8mi(ptr %ptr) {161; CHECK-LABEL: rol8mi:162; CHECK: # %bb.0: # %entry163; CHECK-NEXT: rolb $3, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x07,0x03]164; CHECK-NEXT: retq # encoding: [0xc3]165entry:166 %a = load i8, ptr %ptr167 %0 = shl i8 %a, 3168 %1 = lshr i8 %a, 5169 %rol = or i8 %0, %1170 ret i8 %rol171}172 173define i16 @rol16mi(ptr %ptr) {174; CHECK-LABEL: rol16mi:175; CHECK: # %bb.0: # %entry176; CHECK-NEXT: rolw $3, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x07,0x03]177; CHECK-NEXT: retq # encoding: [0xc3]178entry:179 %a = load i16, ptr %ptr180 %0 = shl i16 %a, 3181 %1 = lshr i16 %a, 13182 %rol = or i16 %0, %1183 ret i16 %rol184}185 186define i32 @rol32mi(ptr %ptr) {187; CHECK-LABEL: rol32mi:188; CHECK: # %bb.0: # %entry189; CHECK-NEXT: roll $3, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x07,0x03]190; CHECK-NEXT: retq # encoding: [0xc3]191entry:192 %a = load i32, ptr %ptr193 %0 = shl i32 %a, 3194 %1 = lshr i32 %a, 29195 %rol = or i32 %0, %1196 ret i32 %rol197}198 199define i64 @rol64mi(ptr %ptr) {200; CHECK-LABEL: rol64mi:201; CHECK: # %bb.0: # %entry202; CHECK-NEXT: rolq $3, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x07,0x03]203; CHECK-NEXT: retq # encoding: [0xc3]204entry:205 %a = load i64, ptr %ptr206 %0 = shl i64 %a, 3207 %1 = lshr i64 %a, 61208 %rol = or i64 %0, %1209 ret i64 %rol210}211 212define i8 @rol8r1(i8 noundef %a) {213; CHECK-LABEL: rol8r1:214; CHECK: # %bb.0: # %entry215; CHECK-NEXT: rolb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xc7]216; CHECK-NEXT: retq # encoding: [0xc3]217entry:218 %0 = shl i8 %a, 1219 %1 = lshr i8 %a, 7220 %rol = or i8 %0, %1221 ret i8 %rol222}223 224define i8 @rol8r1_intrinsic(i8 noundef %a) {225; CHECK-LABEL: rol8r1_intrinsic:226; CHECK: # %bb.0:227; CHECK-NEXT: rolb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xc7]228; CHECK-NEXT: retq # encoding: [0xc3]229 %f = call i8 @llvm.fshr.i8(i8 %a, i8 %a, i8 7)230 ret i8 %f231}232 233define i16 @rol16r1(i16 noundef %a) {234; CHECK-LABEL: rol16r1:235; CHECK: # %bb.0: # %entry236; CHECK-NEXT: rolw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xc7]237; CHECK-NEXT: retq # encoding: [0xc3]238entry:239 %0 = shl i16 %a, 1240 %1 = lshr i16 %a, 15241 %rol = or i16 %0, %1242 ret i16 %rol243}244 245define i16 @rol16r1_intrinsic(i16 noundef %a) {246; CHECK-LABEL: rol16r1_intrinsic:247; CHECK: # %bb.0:248; CHECK-NEXT: rolw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xc7]249; CHECK-NEXT: retq # encoding: [0xc3]250 %f = call i16 @llvm.fshr.i16(i16 %a, i16 %a, i16 15)251 ret i16 %f252}253 254define i32 @rol32r1(i32 noundef %a) {255; CHECK-LABEL: rol32r1:256; CHECK: # %bb.0: # %entry257; CHECK-NEXT: roll %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xc7]258; CHECK-NEXT: retq # encoding: [0xc3]259entry:260 %0 = shl i32 %a, 1261 %1 = lshr i32 %a, 31262 %rol = or i32 %0, %1263 ret i32 %rol264}265 266define i32 @rol32r1_intrinsic(i32 noundef %a) {267; CHECK-LABEL: rol32r1_intrinsic:268; CHECK: # %bb.0:269; CHECK-NEXT: roll %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xc7]270; CHECK-NEXT: retq # encoding: [0xc3]271 %f = call i32 @llvm.fshr.i32(i32 %a, i32 %a, i32 31)272 ret i32 %f273}274 275define i64 @rol64r1(i64 noundef %a) {276; CHECK-LABEL: rol64r1:277; CHECK: # %bb.0: # %entry278; CHECK-NEXT: rolq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xc7]279; CHECK-NEXT: retq # encoding: [0xc3]280entry:281 %0 = shl i64 %a, 1282 %1 = lshr i64 %a, 63283 %rol = or i64 %0, %1284 ret i64 %rol285}286 287define i64 @rol64r1_intrinsic(i64 noundef %a) {288; CHECK-LABEL: rol64r1_intrinsic:289; CHECK: # %bb.0:290; CHECK-NEXT: rolq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xc7]291; CHECK-NEXT: retq # encoding: [0xc3]292 %f = call i64 @llvm.fshr.i64(i64 %a, i64 %a, i64 63)293 ret i64 %f294}295 296define i8 @rol8rcl(i8 noundef %a, i8 %cl) {297; CHECK-LABEL: rol8rcl:298; CHECK: # %bb.0: # %entry299; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]300; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx301; CHECK-NEXT: rolb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xc7]302; CHECK-NEXT: retq # encoding: [0xc3]303entry:304 %0 = shl i8 %a, %cl305 %1 = sub i8 8, %cl306 %2 = lshr i8 %a, %1307 %rol = or i8 %0, %2308 ret i8 %rol309}310 311define i16 @rol16rcl(i16 noundef %a, i16 %cl) {312; CHECK-LABEL: rol16rcl:313; CHECK: # %bb.0: # %entry314; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]315; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx316; CHECK-NEXT: rolw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xc7]317; CHECK-NEXT: retq # encoding: [0xc3]318entry:319 %0 = shl i16 %a, %cl320 %1 = sub i16 16, %cl321 %2 = lshr i16 %a, %1322 %rol = or i16 %0, %2323 ret i16 %rol324}325 326define i32 @rol32rcl(i32 noundef %a, i32 %cl) {327; CHECK-LABEL: rol32rcl:328; CHECK: # %bb.0: # %entry329; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]330; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx331; CHECK-NEXT: roll %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xc7]332; CHECK-NEXT: retq # encoding: [0xc3]333entry:334 %0 = shl i32 %a, %cl335 %1 = sub i32 32, %cl336 %2 = lshr i32 %a, %1337 %rol = or i32 %0, %2338 ret i32 %rol339}340 341define i64 @rol64rcl(i64 noundef %a, i64 %cl) {342; CHECK-LABEL: rol64rcl:343; CHECK: # %bb.0: # %entry344; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]345; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx346; CHECK-NEXT: rolq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xc7]347; CHECK-NEXT: retq # encoding: [0xc3]348entry:349 %0 = shl i64 %a, %cl350 %1 = sub i64 64, %cl351 %2 = lshr i64 %a, %1352 %rol = or i64 %0, %2353 ret i64 %rol354}355 356define i8 @rol8ri(i8 noundef %a) {357; CHECK-LABEL: rol8ri:358; CHECK: # %bb.0: # %entry359; CHECK-NEXT: rolb $3, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xc7,0x03]360; CHECK-NEXT: retq # encoding: [0xc3]361entry:362 %0 = shl i8 %a, 3363 %1 = lshr i8 %a, 5364 %rol = or i8 %0, %1365 ret i8 %rol366}367 368define i16 @rol16ri(i16 noundef %a) {369; CHECK-LABEL: rol16ri:370; CHECK: # %bb.0: # %entry371; CHECK-NEXT: rolw $3, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xc7,0x03]372; CHECK-NEXT: retq # encoding: [0xc3]373entry:374 %0 = shl i16 %a, 3375 %1 = lshr i16 %a, 13376 %rol = or i16 %0, %1377 ret i16 %rol378}379 380define i32 @rol32ri(i32 noundef %a) {381; CHECK-LABEL: rol32ri:382; CHECK: # %bb.0: # %entry383; CHECK-NEXT: roll $3, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xc7,0x03]384; CHECK-NEXT: retq # encoding: [0xc3]385entry:386 %0 = shl i32 %a, 3387 %1 = lshr i32 %a, 29388 %rol = or i32 %0, %1389 ret i32 %rol390}391 392define i64 @rol64ri(i64 noundef %a) {393; CHECK-LABEL: rol64ri:394; CHECK: # %bb.0: # %entry395; CHECK-NEXT: rolq $3, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xc7,0x03]396; CHECK-NEXT: retq # encoding: [0xc3]397entry:398 %0 = shl i64 %a, 3399 %1 = lshr i64 %a, 61400 %rol = or i64 %0, %1401 ret i64 %rol402}403 404define void @rol8m1_legacy(ptr %ptr) {405; CHECK-LABEL: rol8m1_legacy:406; CHECK: # %bb.0: # %entry407; CHECK-NEXT: rolb (%rdi) # encoding: [0xd0,0x07]408; CHECK-NEXT: retq # encoding: [0xc3]409entry:410 %a = load i8, ptr %ptr411 %0 = shl i8 %a, 1412 %1 = lshr i8 %a, 7413 %rol = or i8 %0, %1414 store i8 %rol, ptr %ptr415 ret void416}417 418define void @rol16m1_legacy(ptr %ptr) {419; CHECK-LABEL: rol16m1_legacy:420; CHECK: # %bb.0: # %entry421; CHECK-NEXT: rolw (%rdi) # encoding: [0x66,0xd1,0x07]422; CHECK-NEXT: retq # encoding: [0xc3]423entry:424 %a = load i16, ptr %ptr425 %0 = shl i16 %a, 1426 %1 = lshr i16 %a, 15427 %rol = or i16 %0, %1428 store i16 %rol, ptr %ptr429 ret void430}431 432define void @rol32m1_legacy(ptr %ptr) {433; CHECK-LABEL: rol32m1_legacy:434; CHECK: # %bb.0: # %entry435; CHECK-NEXT: roll (%rdi) # encoding: [0xd1,0x07]436; CHECK-NEXT: retq # encoding: [0xc3]437entry:438 %a = load i32, ptr %ptr439 %0 = shl i32 %a, 1440 %1 = lshr i32 %a, 31441 %rol = or i32 %0, %1442 store i32 %rol, ptr %ptr443 ret void444}445 446define void @rol64m1_legacy(ptr %ptr) {447; CHECK-LABEL: rol64m1_legacy:448; CHECK: # %bb.0: # %entry449; CHECK-NEXT: rolq (%rdi) # encoding: [0x48,0xd1,0x07]450; CHECK-NEXT: retq # encoding: [0xc3]451entry:452 %a = load i64, ptr %ptr453 %0 = shl i64 %a, 1454 %1 = lshr i64 %a, 63455 %rol = or i64 %0, %1456 store i64 %rol, ptr %ptr457 ret void458}459 460define void @rol8mcl_legacy(ptr %ptr, i8 %cl) {461; CHECK-LABEL: rol8mcl_legacy:462; CHECK: # %bb.0: # %entry463; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]464; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx465; CHECK-NEXT: rolb %cl, (%rdi) # encoding: [0xd2,0x07]466; CHECK-NEXT: retq # encoding: [0xc3]467entry:468 %a = load i8, ptr %ptr469 %0 = shl i8 %a, %cl470 %1 = sub i8 8, %cl471 %2 = lshr i8 %a, %1472 %rol = or i8 %0, %2473 store i8 %rol, ptr %ptr474 ret void475}476 477define void @rol16mcl_legacy(ptr %ptr, i16 %cl) {478; CHECK-LABEL: rol16mcl_legacy:479; CHECK: # %bb.0: # %entry480; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]481; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx482; CHECK-NEXT: rolw %cl, (%rdi) # encoding: [0x66,0xd3,0x07]483; CHECK-NEXT: retq # encoding: [0xc3]484entry:485 %a = load i16, ptr %ptr486 %0 = shl i16 %a, %cl487 %1 = sub i16 16, %cl488 %2 = lshr i16 %a, %1489 %rol = or i16 %0, %2490 store i16 %rol, ptr %ptr491 ret void492}493 494define void @rol32mcl_legacy(ptr %ptr, i32 %cl) {495; CHECK-LABEL: rol32mcl_legacy:496; CHECK: # %bb.0: # %entry497; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]498; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx499; CHECK-NEXT: roll %cl, (%rdi) # encoding: [0xd3,0x07]500; CHECK-NEXT: retq # encoding: [0xc3]501entry:502 %a = load i32, ptr %ptr503 %0 = shl i32 %a, %cl504 %1 = sub i32 32, %cl505 %2 = lshr i32 %a, %1506 %rol = or i32 %0, %2507 store i32 %rol, ptr %ptr508 ret void509}510 511define void @rol64mcl_legacy(ptr %ptr, i64 %cl) {512; CHECK-LABEL: rol64mcl_legacy:513; CHECK: # %bb.0: # %entry514; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]515; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx516; CHECK-NEXT: rolq %cl, (%rdi) # encoding: [0x48,0xd3,0x07]517; CHECK-NEXT: retq # encoding: [0xc3]518entry:519 %a = load i64, ptr %ptr520 %0 = shl i64 %a, %cl521 %1 = sub i64 64, %cl522 %2 = lshr i64 %a, %1523 %rol = or i64 %0, %2524 store i64 %rol, ptr %ptr525 ret void526}527 528define void @rol8mi_legacy(ptr %ptr) {529; CHECK-LABEL: rol8mi_legacy:530; CHECK: # %bb.0: # %entry531; CHECK-NEXT: rolb $3, (%rdi) # encoding: [0xc0,0x07,0x03]532; CHECK-NEXT: retq # encoding: [0xc3]533entry:534 %a = load i8, ptr %ptr535 %0 = shl i8 %a, 3536 %1 = lshr i8 %a, 5537 %rol = or i8 %0, %1538 store i8 %rol, ptr %ptr539 ret void540}541 542define void @rol16mi_legacy(ptr %ptr) {543; CHECK-LABEL: rol16mi_legacy:544; CHECK: # %bb.0: # %entry545; CHECK-NEXT: rolw $3, (%rdi) # encoding: [0x66,0xc1,0x07,0x03]546; CHECK-NEXT: retq # encoding: [0xc3]547entry:548 %a = load i16, ptr %ptr549 %0 = shl i16 %a, 3550 %1 = lshr i16 %a, 13551 %rol = or i16 %0, %1552 store i16 %rol, ptr %ptr553 ret void554}555 556define void @rol32mi_legacy(ptr %ptr) {557; CHECK-LABEL: rol32mi_legacy:558; CHECK: # %bb.0: # %entry559; CHECK-NEXT: roll $3, (%rdi) # encoding: [0xc1,0x07,0x03]560; CHECK-NEXT: retq # encoding: [0xc3]561entry:562 %a = load i32, ptr %ptr563 %0 = shl i32 %a, 3564 %1 = lshr i32 %a, 29565 %rol = or i32 %0, %1566 store i32 %rol, ptr %ptr567 ret void568}569 570define void @rol64mi_legacy(ptr %ptr) {571; CHECK-LABEL: rol64mi_legacy:572; CHECK: # %bb.0: # %entry573; CHECK-NEXT: rolq $3, (%rdi) # encoding: [0x48,0xc1,0x07,0x03]574; CHECK-NEXT: retq # encoding: [0xc3]575entry:576 %a = load i64, ptr %ptr577 %0 = shl i64 %a, 3578 %1 = lshr i64 %a, 61579 %rol = or i64 %0, %1580 store i64 %rol, ptr %ptr581 ret void582}583