639 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 @ror8m1(ptr %ptr) {5; CHECK-LABEL: ror8m1:6; CHECK: # %bb.0: # %entry7; CHECK-NEXT: rorb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x0f]8; CHECK-NEXT: retq # encoding: [0xc3]9entry:10 %a = load i8, ptr %ptr11 %0 = lshr i8 %a, 112 %1 = shl i8 %a, 713 %ror = or i8 %0, %114 ret i8 %ror15}16 17define i16 @ror16m1(ptr %ptr) {18; CHECK-LABEL: ror16m1:19; CHECK: # %bb.0: # %entry20; CHECK-NEXT: rorw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x0f]21; CHECK-NEXT: retq # encoding: [0xc3]22entry:23 %a = load i16, ptr %ptr24 %0 = lshr i16 %a, 125 %1 = shl i16 %a, 1526 %ror = or i16 %0, %127 ret i16 %ror28}29 30define i32 @ror32m1(ptr %ptr) {31; CHECK-LABEL: ror32m1:32; CHECK: # %bb.0: # %entry33; CHECK-NEXT: rorl (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x0f]34; CHECK-NEXT: retq # encoding: [0xc3]35entry:36 %a = load i32, ptr %ptr37 %0 = lshr i32 %a, 138 %1 = shl i32 %a, 3139 %ror = or i32 %0, %140 ret i32 %ror41}42 43define i64 @ror64m1(ptr %ptr) {44; CHECK-LABEL: ror64m1:45; CHECK: # %bb.0: # %entry46; CHECK-NEXT: rorq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x0f]47; CHECK-NEXT: retq # encoding: [0xc3]48entry:49 %a = load i64, ptr %ptr50 %0 = lshr i64 %a, 151 %1 = shl i64 %a, 6352 %ror = or i64 %0, %153 ret i64 %ror54}55 56define i8 @ror8mcl(ptr %ptr, i8 %cl) {57; CHECK-LABEL: ror8mcl:58; CHECK: # %bb.0: # %entry59; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]60; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx61; CHECK-NEXT: rorb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x0f]62; CHECK-NEXT: retq # encoding: [0xc3]63entry:64 %a = load i8, ptr %ptr65 %0 = lshr i8 %a, %cl66 %1 = sub i8 8, %cl67 %2 = shl i8 %a, %168 %ror = or i8 %0, %269 ret i8 %ror70}71 72define i8 @ror8mcl_mask(ptr %ptr, i8 %cl) {73; CHECK-LABEL: ror8mcl_mask:74; CHECK: # %bb.0: # %entry75; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]76; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx77; CHECK-NEXT: rorb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x0f]78; CHECK-NEXT: retq # encoding: [0xc3]79entry:80 %shamt = and i8 %cl, 3181 %a = load i8, ptr %ptr82 %0 = lshr i8 %a, %shamt83 %1 = sub i8 8, %shamt84 %2 = shl i8 %a, %185 %ror = or i8 %0, %286 ret i8 %ror87}88 89define i16 @ror16mcl(ptr %ptr, i16 %cl) {90; CHECK-LABEL: ror16mcl:91; CHECK: # %bb.0: # %entry92; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]93; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx94; CHECK-NEXT: rorw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x0f]95; CHECK-NEXT: retq # encoding: [0xc3]96entry:97 %a = load i16, ptr %ptr98 %0 = lshr i16 %a, %cl99 %1 = sub i16 16, %cl100 %2 = shl i16 %a, %1101 %ror = or i16 %0, %2102 ret i16 %ror103}104 105define i16 @ror16mcl_mask(ptr %ptr, i16 %cl) {106; CHECK-LABEL: ror16mcl_mask:107; CHECK: # %bb.0: # %entry108; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]109; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx110; CHECK-NEXT: rorw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x0f]111; CHECK-NEXT: retq # encoding: [0xc3]112entry:113 %shamt = and i16 %cl, 31114 %a = load i16, ptr %ptr115 %0 = lshr i16 %a, %shamt116 %1 = sub i16 16, %shamt117 %2 = shl i16 %a, %1118 %ror = or i16 %0, %2119 ret i16 %ror120}121 122define i32 @ror32mcl(ptr %ptr, i32 %cl) {123; CHECK-LABEL: ror32mcl:124; CHECK: # %bb.0: # %entry125; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]126; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx127; CHECK-NEXT: rorl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x0f]128; CHECK-NEXT: retq # encoding: [0xc3]129entry:130 %a = load i32, ptr %ptr131 %0 = lshr i32 %a, %cl132 %1 = sub i32 32, %cl133 %2 = shl i32 %a, %1134 %ror = or i32 %0, %2135 ret i32 %ror136}137 138define i32 @ror32mcl_mask(ptr %ptr, i32 %cl) {139; CHECK-LABEL: ror32mcl_mask:140; CHECK: # %bb.0: # %entry141; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]142; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx143; CHECK-NEXT: rorl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x0f]144; CHECK-NEXT: retq # encoding: [0xc3]145entry:146 %shamt = and i32 %cl, 31147 %a = load i32, ptr %ptr148 %0 = lshr i32 %a, %shamt149 %1 = sub i32 32, %shamt150 %2 = shl i32 %a, %1151 %ror = or i32 %0, %2152 ret i32 %ror153}154 155define i64 @ror64mcl(ptr %ptr, i64 %cl) {156; CHECK-LABEL: ror64mcl:157; CHECK: # %bb.0: # %entry158; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]159; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx160; CHECK-NEXT: rorq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x0f]161; CHECK-NEXT: retq # encoding: [0xc3]162entry:163 %a = load i64, ptr %ptr164 %0 = lshr i64 %a, %cl165 %1 = sub i64 64, %cl166 %2 = shl i64 %a, %1167 %ror = or i64 %0, %2168 ret i64 %ror169}170 171define i64 @ror64mcl_mask(ptr %ptr, i64 %cl) {172; CHECK-LABEL: ror64mcl_mask:173; CHECK: # %bb.0: # %entry174; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]175; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx176; CHECK-NEXT: rorq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x0f]177; CHECK-NEXT: retq # encoding: [0xc3]178entry:179 %shamt = and i64 %cl, 63180 %a = load i64, ptr %ptr181 %0 = lshr i64 %a, %shamt182 %1 = sub i64 64, %shamt183 %2 = shl i64 %a, %1184 %ror = or i64 %0, %2185 ret i64 %ror186}187 188define i8 @ror8mi(ptr %ptr) {189; CHECK-LABEL: ror8mi:190; CHECK: # %bb.0: # %entry191; CHECK-NEXT: rolb $5, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x07,0x05]192; CHECK-NEXT: retq # encoding: [0xc3]193entry:194 %a = load i8, ptr %ptr195 %0 = lshr i8 %a, 3196 %1 = shl i8 %a, 5197 %ror = or i8 %0, %1198 ret i8 %ror199}200 201define i16 @ror16mi(ptr %ptr) {202; CHECK-LABEL: ror16mi:203; CHECK: # %bb.0: # %entry204; CHECK-NEXT: rolw $13, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x07,0x0d]205; CHECK-NEXT: retq # encoding: [0xc3]206entry:207 %a = load i16, ptr %ptr208 %0 = lshr i16 %a, 3209 %1 = shl i16 %a, 13210 %ror = or i16 %0, %1211 ret i16 %ror212}213 214define i32 @ror32mi(ptr %ptr) {215; CHECK-LABEL: ror32mi:216; CHECK: # %bb.0: # %entry217; CHECK-NEXT: roll $29, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x07,0x1d]218; CHECK-NEXT: retq # encoding: [0xc3]219entry:220 %a = load i32, ptr %ptr221 %0 = lshr i32 %a, 3222 %1 = shl i32 %a, 29223 %ror = or i32 %0, %1224 ret i32 %ror225}226 227define i64 @ror64mi(ptr %ptr) {228; CHECK-LABEL: ror64mi:229; CHECK: # %bb.0: # %entry230; CHECK-NEXT: rolq $61, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x07,0x3d]231; CHECK-NEXT: retq # encoding: [0xc3]232entry:233 %a = load i64, ptr %ptr234 %0 = lshr i64 %a, 3235 %1 = shl i64 %a, 61236 %ror = or i64 %0, %1237 ret i64 %ror238}239 240define i8 @ror8r1(i8 noundef %a) {241; CHECK-LABEL: ror8r1:242; CHECK: # %bb.0: # %entry243; CHECK-NEXT: rorb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xcf]244; CHECK-NEXT: retq # encoding: [0xc3]245entry:246 %0 = lshr i8 %a, 1247 %1 = shl i8 %a, 7248 %ror = or i8 %0, %1249 ret i8 %ror250}251 252define i16 @ror16r1(i16 noundef %a) {253; CHECK-LABEL: ror16r1:254; CHECK: # %bb.0: # %entry255; CHECK-NEXT: rorw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xcf]256; CHECK-NEXT: retq # encoding: [0xc3]257entry:258 %0 = lshr i16 %a, 1259 %1 = shl i16 %a, 15260 %ror = or i16 %0, %1261 ret i16 %ror262}263 264define i32 @ror32r1(i32 noundef %a) {265; CHECK-LABEL: ror32r1:266; CHECK: # %bb.0: # %entry267; CHECK-NEXT: rorl %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xcf]268; CHECK-NEXT: retq # encoding: [0xc3]269entry:270 %0 = lshr i32 %a, 1271 %1 = shl i32 %a, 31272 %ror = or i32 %0, %1273 ret i32 %ror274}275 276define i64 @ror64r1(i64 noundef %a) {277; CHECK-LABEL: ror64r1:278; CHECK: # %bb.0: # %entry279; CHECK-NEXT: rorq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xcf]280; CHECK-NEXT: retq # encoding: [0xc3]281entry:282 %0 = lshr i64 %a, 1283 %1 = shl i64 %a, 63284 %ror = or i64 %0, %1285 ret i64 %ror286}287 288define i8 @ror8rcl(i8 noundef %a, i8 %cl) {289; CHECK-LABEL: ror8rcl:290; CHECK: # %bb.0: # %entry291; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]292; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx293; CHECK-NEXT: rorb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xcf]294; CHECK-NEXT: retq # encoding: [0xc3]295entry:296 %0 = lshr i8 %a, %cl297 %1 = sub i8 8, %cl298 %2 = shl i8 %a, %1299 %ror = or i8 %0, %2300 ret i8 %ror301}302 303define i8 @ror8rcl_mask(i8 noundef %a, i8 %cl) {304; CHECK-LABEL: ror8rcl_mask:305; CHECK: # %bb.0: # %entry306; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]307; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx308; CHECK-NEXT: rorb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xcf]309; CHECK-NEXT: retq # encoding: [0xc3]310entry:311 %shamt = and i8 %cl, 31312 %0 = lshr i8 %a, %shamt313 %1 = sub i8 8, %shamt314 %2 = shl i8 %a, %1315 %ror = or i8 %0, %2316 ret i8 %ror317}318 319define i16 @ror16rcl(i16 noundef %a, i16 %cl) {320; CHECK-LABEL: ror16rcl:321; CHECK: # %bb.0: # %entry322; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]323; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx324; CHECK-NEXT: rorw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xcf]325; CHECK-NEXT: retq # encoding: [0xc3]326entry:327 %0 = lshr i16 %a, %cl328 %1 = sub i16 16, %cl329 %2 = shl i16 %a, %1330 %ror = or i16 %0, %2331 ret i16 %ror332}333 334define i16 @ror16rcl_mask(i16 noundef %a, i16 %cl) {335; CHECK-LABEL: ror16rcl_mask:336; CHECK: # %bb.0: # %entry337; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]338; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx339; CHECK-NEXT: rorw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xcf]340; CHECK-NEXT: retq # encoding: [0xc3]341entry:342 %shamt = and i16 %cl, 31343 %0 = lshr i16 %a, %shamt344 %1 = sub i16 16, %shamt345 %2 = shl i16 %a, %1346 %ror = or i16 %0, %2347 ret i16 %ror348}349 350define i32 @ror32rcl(i32 noundef %a, i32 %cl) {351; CHECK-LABEL: ror32rcl:352; CHECK: # %bb.0: # %entry353; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]354; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx355; CHECK-NEXT: rorl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xcf]356; CHECK-NEXT: retq # encoding: [0xc3]357entry:358 %0 = lshr i32 %a, %cl359 %1 = sub i32 32, %cl360 %2 = shl i32 %a, %1361 %ror = or i32 %0, %2362 ret i32 %ror363}364 365define i32 @ror32rcl_mask(i32 noundef %a, i32 %cl) {366; CHECK-LABEL: ror32rcl_mask:367; CHECK: # %bb.0: # %entry368; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]369; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx370; CHECK-NEXT: rorl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xcf]371; CHECK-NEXT: retq # encoding: [0xc3]372entry:373 %shamt = and i32 %cl, 31374 %0 = lshr i32 %a, %shamt375 %1 = sub i32 32, %shamt376 %2 = shl i32 %a, %1377 %ror = or i32 %0, %2378 ret i32 %ror379}380 381define i64 @ror64rcl(i64 noundef %a, i64 %cl) {382; CHECK-LABEL: ror64rcl:383; CHECK: # %bb.0: # %entry384; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]385; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx386; CHECK-NEXT: rorq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xcf]387; CHECK-NEXT: retq # encoding: [0xc3]388entry:389 %0 = lshr i64 %a, %cl390 %1 = sub i64 64, %cl391 %2 = shl i64 %a, %1392 %ror = or i64 %0, %2393 ret i64 %ror394}395 396define i64 @ror64rcl_mask(i64 noundef %a, i64 %cl) {397; CHECK-LABEL: ror64rcl_mask:398; CHECK: # %bb.0: # %entry399; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]400; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx401; CHECK-NEXT: rorq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xcf]402; CHECK-NEXT: retq # encoding: [0xc3]403entry:404 %shamt = and i64 %cl, 63405 %0 = lshr i64 %a, %shamt406 %1 = sub i64 64, %shamt407 %2 = shl i64 %a, %1408 %ror = or i64 %0, %2409 ret i64 %ror410}411 412define i8 @ror8ri(i8 noundef %a) {413; CHECK-LABEL: ror8ri:414; CHECK: # %bb.0: # %entry415; CHECK-NEXT: rolb $5, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xc7,0x05]416; CHECK-NEXT: retq # encoding: [0xc3]417entry:418 %0 = lshr i8 %a, 3419 %1 = shl i8 %a, 5420 %ror = or i8 %0, %1421 ret i8 %ror422}423 424define i16 @ror16ri(i16 noundef %a) {425; CHECK-LABEL: ror16ri:426; CHECK: # %bb.0: # %entry427; CHECK-NEXT: rolw $13, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xc7,0x0d]428; CHECK-NEXT: retq # encoding: [0xc3]429entry:430 %0 = lshr i16 %a, 3431 %1 = shl i16 %a, 13432 %ror = or i16 %0, %1433 ret i16 %ror434}435 436define i32 @ror32ri(i32 noundef %a) {437; CHECK-LABEL: ror32ri:438; CHECK: # %bb.0: # %entry439; CHECK-NEXT: roll $29, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xc7,0x1d]440; CHECK-NEXT: retq # encoding: [0xc3]441entry:442 %0 = lshr i32 %a, 3443 %1 = shl i32 %a, 29444 %ror = or i32 %0, %1445 ret i32 %ror446}447 448define i64 @ror64ri(i64 noundef %a) {449; CHECK-LABEL: ror64ri:450; CHECK: # %bb.0: # %entry451; CHECK-NEXT: rolq $61, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xc7,0x3d]452; CHECK-NEXT: retq # encoding: [0xc3]453entry:454 %0 = lshr i64 %a, 3455 %1 = shl i64 %a, 61456 %ror = or i64 %0, %1457 ret i64 %ror458}459 460define void @ror8m1_legacy(ptr %ptr) {461; CHECK-LABEL: ror8m1_legacy:462; CHECK: # %bb.0: # %entry463; CHECK-NEXT: rorb (%rdi) # encoding: [0xd0,0x0f]464; CHECK-NEXT: retq # encoding: [0xc3]465entry:466 %a = load i8, ptr %ptr467 %0 = lshr i8 %a, 1468 %1 = shl i8 %a, 7469 %ror = or i8 %0, %1470 store i8 %ror, ptr %ptr471 ret void472}473 474define void @ror16m1_legacy(ptr %ptr) {475; CHECK-LABEL: ror16m1_legacy:476; CHECK: # %bb.0: # %entry477; CHECK-NEXT: rorw (%rdi) # encoding: [0x66,0xd1,0x0f]478; CHECK-NEXT: retq # encoding: [0xc3]479entry:480 %a = load i16, ptr %ptr481 %0 = lshr i16 %a, 1482 %1 = shl i16 %a, 15483 %ror = or i16 %0, %1484 store i16 %ror, ptr %ptr485 ret void486}487 488define void @ror32m1_legacy(ptr %ptr) {489; CHECK-LABEL: ror32m1_legacy:490; CHECK: # %bb.0: # %entry491; CHECK-NEXT: rorl (%rdi) # encoding: [0xd1,0x0f]492; CHECK-NEXT: retq # encoding: [0xc3]493entry:494 %a = load i32, ptr %ptr495 %0 = lshr i32 %a, 1496 %1 = shl i32 %a, 31497 %ror = or i32 %0, %1498 store i32 %ror, ptr %ptr499 ret void500}501 502define void @ror64m1_legacy(ptr %ptr) {503; CHECK-LABEL: ror64m1_legacy:504; CHECK: # %bb.0: # %entry505; CHECK-NEXT: rorq (%rdi) # encoding: [0x48,0xd1,0x0f]506; CHECK-NEXT: retq # encoding: [0xc3]507entry:508 %a = load i64, ptr %ptr509 %0 = lshr i64 %a, 1510 %1 = shl i64 %a, 63511 %ror = or i64 %0, %1512 store i64 %ror, ptr %ptr513 ret void514}515 516define void @ror8mcl_legacy(ptr %ptr, i8 %cl) {517; CHECK-LABEL: ror8mcl_legacy:518; CHECK: # %bb.0: # %entry519; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]520; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx521; CHECK-NEXT: rorb %cl, (%rdi) # encoding: [0xd2,0x0f]522; CHECK-NEXT: retq # encoding: [0xc3]523entry:524 %a = load i8, ptr %ptr525 %0 = lshr i8 %a, %cl526 %1 = sub i8 8, %cl527 %2 = shl i8 %a, %1528 %ror = or i8 %0, %2529 store i8 %ror, ptr %ptr530 ret void531}532 533define void @ror16mcl_legacy(ptr %ptr, i16 %cl) {534; CHECK-LABEL: ror16mcl_legacy:535; CHECK: # %bb.0: # %entry536; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]537; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx538; CHECK-NEXT: rorw %cl, (%rdi) # encoding: [0x66,0xd3,0x0f]539; CHECK-NEXT: retq # encoding: [0xc3]540entry:541 %a = load i16, ptr %ptr542 %0 = lshr i16 %a, %cl543 %1 = sub i16 16, %cl544 %2 = shl i16 %a, %1545 %ror = or i16 %0, %2546 store i16 %ror, ptr %ptr547 ret void548}549 550define void @ror32mcl_legacy(ptr %ptr, i32 %cl) {551; CHECK-LABEL: ror32mcl_legacy:552; CHECK: # %bb.0: # %entry553; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1]554; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx555; CHECK-NEXT: rorl %cl, (%rdi) # encoding: [0xd3,0x0f]556; CHECK-NEXT: retq # encoding: [0xc3]557entry:558 %a = load i32, ptr %ptr559 %0 = lshr i32 %a, %cl560 %1 = sub i32 32, %cl561 %2 = shl i32 %a, %1562 %ror = or i32 %0, %2563 store i32 %ror, ptr %ptr564 ret void565}566 567define void @ror64mcl_legacy(ptr %ptr, i64 %cl) {568; CHECK-LABEL: ror64mcl_legacy:569; CHECK: # %bb.0: # %entry570; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1]571; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx572; CHECK-NEXT: rorq %cl, (%rdi) # encoding: [0x48,0xd3,0x0f]573; CHECK-NEXT: retq # encoding: [0xc3]574entry:575 %a = load i64, ptr %ptr576 %0 = lshr i64 %a, %cl577 %1 = sub i64 64, %cl578 %2 = shl i64 %a, %1579 %ror = or i64 %0, %2580 store i64 %ror, ptr %ptr581 ret void582}583 584define void @ror8mi_legacy(ptr %ptr) {585; CHECK-LABEL: ror8mi_legacy:586; CHECK: # %bb.0: # %entry587; CHECK-NEXT: rolb $5, (%rdi) # encoding: [0xc0,0x07,0x05]588; CHECK-NEXT: retq # encoding: [0xc3]589entry:590 %a = load i8, ptr %ptr591 %0 = lshr i8 %a, 3592 %1 = shl i8 %a, 5593 %ror = or i8 %0, %1594 store i8 %ror, ptr %ptr595 ret void596}597 598define void @ror16mi_legacy(ptr %ptr) {599; CHECK-LABEL: ror16mi_legacy:600; CHECK: # %bb.0: # %entry601; CHECK-NEXT: rolw $13, (%rdi) # encoding: [0x66,0xc1,0x07,0x0d]602; CHECK-NEXT: retq # encoding: [0xc3]603entry:604 %a = load i16, ptr %ptr605 %0 = lshr i16 %a, 3606 %1 = shl i16 %a, 13607 %ror = or i16 %0, %1608 store i16 %ror, ptr %ptr609 ret void610}611 612define void @ror32mi_legacy(ptr %ptr) {613; CHECK-LABEL: ror32mi_legacy:614; CHECK: # %bb.0: # %entry615; CHECK-NEXT: roll $29, (%rdi) # encoding: [0xc1,0x07,0x1d]616; CHECK-NEXT: retq # encoding: [0xc3]617entry:618 %a = load i32, ptr %ptr619 %0 = lshr i32 %a, 3620 %1 = shl i32 %a, 29621 %ror = or i32 %0, %1622 store i32 %ror, ptr %ptr623 ret void624}625 626define void @ror64mi_legacy(ptr %ptr) {627; CHECK-LABEL: ror64mi_legacy:628; CHECK: # %bb.0: # %entry629; CHECK-NEXT: rolq $61, (%rdi) # encoding: [0x48,0xc1,0x07,0x3d]630; CHECK-NEXT: retq # encoding: [0xc3]631entry:632 %a = load i64, ptr %ptr633 %0 = lshr i64 %a, 3634 %1 = shl i64 %a, 61635 %ror = or i64 %0, %1636 store i64 %ror, ptr %ptr637 ret void638}639