1*5c68c6d7SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*5c68c6d7SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs --show-mc-encoding | FileCheck %s 3*5c68c6d7SShengchen Kan 4*5c68c6d7SShengchen Kandefine i8 @ror8m1(ptr %ptr) { 5*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8m1: 6*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 7*5c68c6d7SShengchen Kan; CHECK-NEXT: rorb (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0x0f] 8*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 9*5c68c6d7SShengchen Kanentry: 10*5c68c6d7SShengchen Kan %a = load i8, ptr %ptr 11*5c68c6d7SShengchen Kan %0 = lshr i8 %a, 1 12*5c68c6d7SShengchen Kan %1 = shl i8 %a, 7 13*5c68c6d7SShengchen Kan %ror = or i8 %0, %1 14*5c68c6d7SShengchen Kan ret i8 %ror 15*5c68c6d7SShengchen Kan} 16*5c68c6d7SShengchen Kan 17*5c68c6d7SShengchen Kandefine i16 @ror16m1(ptr %ptr) { 18*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16m1: 19*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 20*5c68c6d7SShengchen Kan; CHECK-NEXT: rorw (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0x0f] 21*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 22*5c68c6d7SShengchen Kanentry: 23*5c68c6d7SShengchen Kan %a = load i16, ptr %ptr 24*5c68c6d7SShengchen Kan %0 = lshr i16 %a, 1 25*5c68c6d7SShengchen Kan %1 = shl i16 %a, 15 26*5c68c6d7SShengchen Kan %ror = or i16 %0, %1 27*5c68c6d7SShengchen Kan ret i16 %ror 28*5c68c6d7SShengchen Kan} 29*5c68c6d7SShengchen Kan 30*5c68c6d7SShengchen Kandefine i32 @ror32m1(ptr %ptr) { 31*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32m1: 32*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 33*5c68c6d7SShengchen Kan; CHECK-NEXT: rorl (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0x0f] 34*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 35*5c68c6d7SShengchen Kanentry: 36*5c68c6d7SShengchen Kan %a = load i32, ptr %ptr 37*5c68c6d7SShengchen Kan %0 = lshr i32 %a, 1 38*5c68c6d7SShengchen Kan %1 = shl i32 %a, 31 39*5c68c6d7SShengchen Kan %ror = or i32 %0, %1 40*5c68c6d7SShengchen Kan ret i32 %ror 41*5c68c6d7SShengchen Kan} 42*5c68c6d7SShengchen Kan 43*5c68c6d7SShengchen Kandefine i64 @ror64m1(ptr %ptr) { 44*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64m1: 45*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 46*5c68c6d7SShengchen Kan; CHECK-NEXT: rorq (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0x0f] 47*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 48*5c68c6d7SShengchen Kanentry: 49*5c68c6d7SShengchen Kan %a = load i64, ptr %ptr 50*5c68c6d7SShengchen Kan %0 = lshr i64 %a, 1 51*5c68c6d7SShengchen Kan %1 = shl i64 %a, 63 52*5c68c6d7SShengchen Kan %ror = or i64 %0, %1 53*5c68c6d7SShengchen Kan ret i64 %ror 54*5c68c6d7SShengchen Kan} 55*5c68c6d7SShengchen Kan 56*5c68c6d7SShengchen Kandefine i8 @ror8mcl(ptr %ptr, i8 %cl) { 57*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mcl: 58*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 59*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 60*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 61*5c68c6d7SShengchen Kan; CHECK-NEXT: rorb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x0f] 62*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 63*5c68c6d7SShengchen Kanentry: 64*5c68c6d7SShengchen Kan %a = load i8, ptr %ptr 65*5c68c6d7SShengchen Kan %0 = lshr i8 %a, %cl 66*5c68c6d7SShengchen Kan %1 = sub i8 8, %cl 67*5c68c6d7SShengchen Kan %2 = shl i8 %a, %1 68*5c68c6d7SShengchen Kan %ror = or i8 %0, %2 69*5c68c6d7SShengchen Kan ret i8 %ror 70*5c68c6d7SShengchen Kan} 71*5c68c6d7SShengchen Kan 72*5c68c6d7SShengchen Kandefine i8 @ror8mcl_mask(ptr %ptr, i8 %cl) { 73*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mcl_mask: 74*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 75*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 76*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 77*5c68c6d7SShengchen Kan; CHECK-NEXT: rorb %cl, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0x0f] 78*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 79*5c68c6d7SShengchen Kanentry: 80*5c68c6d7SShengchen Kan %shamt = and i8 %cl, 31 81*5c68c6d7SShengchen Kan %a = load i8, ptr %ptr 82*5c68c6d7SShengchen Kan %0 = lshr i8 %a, %shamt 83*5c68c6d7SShengchen Kan %1 = sub i8 8, %shamt 84*5c68c6d7SShengchen Kan %2 = shl i8 %a, %1 85*5c68c6d7SShengchen Kan %ror = or i8 %0, %2 86*5c68c6d7SShengchen Kan ret i8 %ror 87*5c68c6d7SShengchen Kan} 88*5c68c6d7SShengchen Kan 89*5c68c6d7SShengchen Kandefine i16 @ror16mcl(ptr %ptr, i16 %cl) { 90*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mcl: 91*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 92*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 93*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 94*5c68c6d7SShengchen Kan; CHECK-NEXT: rorw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x0f] 95*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 96*5c68c6d7SShengchen Kanentry: 97*5c68c6d7SShengchen Kan %a = load i16, ptr %ptr 98*5c68c6d7SShengchen Kan %0 = lshr i16 %a, %cl 99*5c68c6d7SShengchen Kan %1 = sub i16 16, %cl 100*5c68c6d7SShengchen Kan %2 = shl i16 %a, %1 101*5c68c6d7SShengchen Kan %ror = or i16 %0, %2 102*5c68c6d7SShengchen Kan ret i16 %ror 103*5c68c6d7SShengchen Kan} 104*5c68c6d7SShengchen Kan 105*5c68c6d7SShengchen Kandefine i16 @ror16mcl_mask(ptr %ptr, i16 %cl) { 106*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mcl_mask: 107*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 108*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 109*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 110*5c68c6d7SShengchen Kan; CHECK-NEXT: rorw %cl, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0x0f] 111*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 112*5c68c6d7SShengchen Kanentry: 113*5c68c6d7SShengchen Kan %shamt = and i16 %cl, 31 114*5c68c6d7SShengchen Kan %a = load i16, ptr %ptr 115*5c68c6d7SShengchen Kan %0 = lshr i16 %a, %shamt 116*5c68c6d7SShengchen Kan %1 = sub i16 16, %shamt 117*5c68c6d7SShengchen Kan %2 = shl i16 %a, %1 118*5c68c6d7SShengchen Kan %ror = or i16 %0, %2 119*5c68c6d7SShengchen Kan ret i16 %ror 120*5c68c6d7SShengchen Kan} 121*5c68c6d7SShengchen Kan 122*5c68c6d7SShengchen Kandefine i32 @ror32mcl(ptr %ptr, i32 %cl) { 123*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mcl: 124*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 125*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 126*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 127*5c68c6d7SShengchen Kan; CHECK-NEXT: rorl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x0f] 128*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 129*5c68c6d7SShengchen Kanentry: 130*5c68c6d7SShengchen Kan %a = load i32, ptr %ptr 131*5c68c6d7SShengchen Kan %0 = lshr i32 %a, %cl 132*5c68c6d7SShengchen Kan %1 = sub i32 32, %cl 133*5c68c6d7SShengchen Kan %2 = shl i32 %a, %1 134*5c68c6d7SShengchen Kan %ror = or i32 %0, %2 135*5c68c6d7SShengchen Kan ret i32 %ror 136*5c68c6d7SShengchen Kan} 137*5c68c6d7SShengchen Kan 138*5c68c6d7SShengchen Kandefine i32 @ror32mcl_mask(ptr %ptr, i32 %cl) { 139*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mcl_mask: 140*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 141*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 142*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 143*5c68c6d7SShengchen Kan; CHECK-NEXT: rorl %cl, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0x0f] 144*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 145*5c68c6d7SShengchen Kanentry: 146*5c68c6d7SShengchen Kan %shamt = and i32 %cl, 31 147*5c68c6d7SShengchen Kan %a = load i32, ptr %ptr 148*5c68c6d7SShengchen Kan %0 = lshr i32 %a, %shamt 149*5c68c6d7SShengchen Kan %1 = sub i32 32, %shamt 150*5c68c6d7SShengchen Kan %2 = shl i32 %a, %1 151*5c68c6d7SShengchen Kan %ror = or i32 %0, %2 152*5c68c6d7SShengchen Kan ret i32 %ror 153*5c68c6d7SShengchen Kan} 154*5c68c6d7SShengchen Kan 155*5c68c6d7SShengchen Kandefine i64 @ror64mcl(ptr %ptr, i64 %cl) { 156*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mcl: 157*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 158*5c68c6d7SShengchen Kan; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1] 159*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx 160*5c68c6d7SShengchen Kan; CHECK-NEXT: rorq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x0f] 161*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 162*5c68c6d7SShengchen Kanentry: 163*5c68c6d7SShengchen Kan %a = load i64, ptr %ptr 164*5c68c6d7SShengchen Kan %0 = lshr i64 %a, %cl 165*5c68c6d7SShengchen Kan %1 = sub i64 64, %cl 166*5c68c6d7SShengchen Kan %2 = shl i64 %a, %1 167*5c68c6d7SShengchen Kan %ror = or i64 %0, %2 168*5c68c6d7SShengchen Kan ret i64 %ror 169*5c68c6d7SShengchen Kan} 170*5c68c6d7SShengchen Kan 171*5c68c6d7SShengchen Kandefine i64 @ror64mcl_mask(ptr %ptr, i64 %cl) { 172*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mcl_mask: 173*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 174*5c68c6d7SShengchen Kan; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1] 175*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx 176*5c68c6d7SShengchen Kan; CHECK-NEXT: rorq %cl, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0x0f] 177*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 178*5c68c6d7SShengchen Kanentry: 179*5c68c6d7SShengchen Kan %shamt = and i64 %cl, 63 180*5c68c6d7SShengchen Kan %a = load i64, ptr %ptr 181*5c68c6d7SShengchen Kan %0 = lshr i64 %a, %shamt 182*5c68c6d7SShengchen Kan %1 = sub i64 64, %shamt 183*5c68c6d7SShengchen Kan %2 = shl i64 %a, %1 184*5c68c6d7SShengchen Kan %ror = or i64 %0, %2 185*5c68c6d7SShengchen Kan ret i64 %ror 186*5c68c6d7SShengchen Kan} 187*5c68c6d7SShengchen Kan 188*5c68c6d7SShengchen Kandefine i8 @ror8mi(ptr %ptr) { 189*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mi: 190*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 191*5c68c6d7SShengchen Kan; CHECK-NEXT: rolb $5, (%rdi), %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0x07,0x05] 192*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 193*5c68c6d7SShengchen Kanentry: 194*5c68c6d7SShengchen Kan %a = load i8, ptr %ptr 195*5c68c6d7SShengchen Kan %0 = lshr i8 %a, 3 196*5c68c6d7SShengchen Kan %1 = shl i8 %a, 5 197*5c68c6d7SShengchen Kan %ror = or i8 %0, %1 198*5c68c6d7SShengchen Kan ret i8 %ror 199*5c68c6d7SShengchen Kan} 200*5c68c6d7SShengchen Kan 201*5c68c6d7SShengchen Kandefine i16 @ror16mi(ptr %ptr) { 202*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mi: 203*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 204*5c68c6d7SShengchen Kan; CHECK-NEXT: rolw $13, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x07,0x0d] 205*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 206*5c68c6d7SShengchen Kanentry: 207*5c68c6d7SShengchen Kan %a = load i16, ptr %ptr 208*5c68c6d7SShengchen Kan %0 = lshr i16 %a, 3 209*5c68c6d7SShengchen Kan %1 = shl i16 %a, 13 210*5c68c6d7SShengchen Kan %ror = or i16 %0, %1 211*5c68c6d7SShengchen Kan ret i16 %ror 212*5c68c6d7SShengchen Kan} 213*5c68c6d7SShengchen Kan 214*5c68c6d7SShengchen Kandefine i32 @ror32mi(ptr %ptr) { 215*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mi: 216*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 217*5c68c6d7SShengchen Kan; CHECK-NEXT: roll $29, (%rdi), %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0x07,0x1d] 218*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 219*5c68c6d7SShengchen Kanentry: 220*5c68c6d7SShengchen Kan %a = load i32, ptr %ptr 221*5c68c6d7SShengchen Kan %0 = lshr i32 %a, 3 222*5c68c6d7SShengchen Kan %1 = shl i32 %a, 29 223*5c68c6d7SShengchen Kan %ror = or i32 %0, %1 224*5c68c6d7SShengchen Kan ret i32 %ror 225*5c68c6d7SShengchen Kan} 226*5c68c6d7SShengchen Kan 227*5c68c6d7SShengchen Kandefine i64 @ror64mi(ptr %ptr) { 228*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mi: 229*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 230*5c68c6d7SShengchen Kan; CHECK-NEXT: rolq $61, (%rdi), %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0x07,0x3d] 231*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 232*5c68c6d7SShengchen Kanentry: 233*5c68c6d7SShengchen Kan %a = load i64, ptr %ptr 234*5c68c6d7SShengchen Kan %0 = lshr i64 %a, 3 235*5c68c6d7SShengchen Kan %1 = shl i64 %a, 61 236*5c68c6d7SShengchen Kan %ror = or i64 %0, %1 237*5c68c6d7SShengchen Kan ret i64 %ror 238*5c68c6d7SShengchen Kan} 239*5c68c6d7SShengchen Kan 240*5c68c6d7SShengchen Kandefine i8 @ror8r1(i8 noundef %a) { 241*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8r1: 242*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 243*5c68c6d7SShengchen Kan; CHECK-NEXT: rorb %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd0,0xcf] 244*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 245*5c68c6d7SShengchen Kanentry: 246*5c68c6d7SShengchen Kan %0 = lshr i8 %a, 1 247*5c68c6d7SShengchen Kan %1 = shl i8 %a, 7 248*5c68c6d7SShengchen Kan %ror = or i8 %0, %1 249*5c68c6d7SShengchen Kan ret i8 %ror 250*5c68c6d7SShengchen Kan} 251*5c68c6d7SShengchen Kan 252*5c68c6d7SShengchen Kandefine i16 @ror16r1(i16 noundef %a) { 253*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16r1: 254*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 255*5c68c6d7SShengchen Kan; CHECK-NEXT: rorw %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd1,0xcf] 256*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 257*5c68c6d7SShengchen Kanentry: 258*5c68c6d7SShengchen Kan %0 = lshr i16 %a, 1 259*5c68c6d7SShengchen Kan %1 = shl i16 %a, 15 260*5c68c6d7SShengchen Kan %ror = or i16 %0, %1 261*5c68c6d7SShengchen Kan ret i16 %ror 262*5c68c6d7SShengchen Kan} 263*5c68c6d7SShengchen Kan 264*5c68c6d7SShengchen Kandefine i32 @ror32r1(i32 noundef %a) { 265*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32r1: 266*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 267*5c68c6d7SShengchen Kan; CHECK-NEXT: rorl %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd1,0xcf] 268*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 269*5c68c6d7SShengchen Kanentry: 270*5c68c6d7SShengchen Kan %0 = lshr i32 %a, 1 271*5c68c6d7SShengchen Kan %1 = shl i32 %a, 31 272*5c68c6d7SShengchen Kan %ror = or i32 %0, %1 273*5c68c6d7SShengchen Kan ret i32 %ror 274*5c68c6d7SShengchen Kan} 275*5c68c6d7SShengchen Kan 276*5c68c6d7SShengchen Kandefine i64 @ror64r1(i64 noundef %a) { 277*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64r1: 278*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 279*5c68c6d7SShengchen Kan; CHECK-NEXT: rorq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd1,0xcf] 280*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 281*5c68c6d7SShengchen Kanentry: 282*5c68c6d7SShengchen Kan %0 = lshr i64 %a, 1 283*5c68c6d7SShengchen Kan %1 = shl i64 %a, 63 284*5c68c6d7SShengchen Kan %ror = or i64 %0, %1 285*5c68c6d7SShengchen Kan ret i64 %ror 286*5c68c6d7SShengchen Kan} 287*5c68c6d7SShengchen Kan 288*5c68c6d7SShengchen Kandefine i8 @ror8rcl(i8 noundef %a, i8 %cl) { 289*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8rcl: 290*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 291*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 292*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 293*5c68c6d7SShengchen Kan; CHECK-NEXT: rorb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xcf] 294*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 295*5c68c6d7SShengchen Kanentry: 296*5c68c6d7SShengchen Kan %0 = lshr i8 %a, %cl 297*5c68c6d7SShengchen Kan %1 = sub i8 8, %cl 298*5c68c6d7SShengchen Kan %2 = shl i8 %a, %1 299*5c68c6d7SShengchen Kan %ror = or i8 %0, %2 300*5c68c6d7SShengchen Kan ret i8 %ror 301*5c68c6d7SShengchen Kan} 302*5c68c6d7SShengchen Kan 303*5c68c6d7SShengchen Kandefine i8 @ror8rcl_mask(i8 noundef %a, i8 %cl) { 304*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8rcl_mask: 305*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 306*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 307*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 308*5c68c6d7SShengchen Kan; CHECK-NEXT: rorb %cl, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xd2,0xcf] 309*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 310*5c68c6d7SShengchen Kanentry: 311*5c68c6d7SShengchen Kan %shamt = and i8 %cl, 31 312*5c68c6d7SShengchen Kan %0 = lshr i8 %a, %shamt 313*5c68c6d7SShengchen Kan %1 = sub i8 8, %shamt 314*5c68c6d7SShengchen Kan %2 = shl i8 %a, %1 315*5c68c6d7SShengchen Kan %ror = or i8 %0, %2 316*5c68c6d7SShengchen Kan ret i8 %ror 317*5c68c6d7SShengchen Kan} 318*5c68c6d7SShengchen Kan 319*5c68c6d7SShengchen Kandefine i16 @ror16rcl(i16 noundef %a, i16 %cl) { 320*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16rcl: 321*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 322*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 323*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 324*5c68c6d7SShengchen Kan; CHECK-NEXT: rorw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xcf] 325*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 326*5c68c6d7SShengchen Kanentry: 327*5c68c6d7SShengchen Kan %0 = lshr i16 %a, %cl 328*5c68c6d7SShengchen Kan %1 = sub i16 16, %cl 329*5c68c6d7SShengchen Kan %2 = shl i16 %a, %1 330*5c68c6d7SShengchen Kan %ror = or i16 %0, %2 331*5c68c6d7SShengchen Kan ret i16 %ror 332*5c68c6d7SShengchen Kan} 333*5c68c6d7SShengchen Kan 334*5c68c6d7SShengchen Kandefine i16 @ror16rcl_mask(i16 noundef %a, i16 %cl) { 335*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16rcl_mask: 336*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 337*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 338*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 339*5c68c6d7SShengchen Kan; CHECK-NEXT: rorw %cl, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xd3,0xcf] 340*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 341*5c68c6d7SShengchen Kanentry: 342*5c68c6d7SShengchen Kan %shamt = and i16 %cl, 31 343*5c68c6d7SShengchen Kan %0 = lshr i16 %a, %shamt 344*5c68c6d7SShengchen Kan %1 = sub i16 16, %shamt 345*5c68c6d7SShengchen Kan %2 = shl i16 %a, %1 346*5c68c6d7SShengchen Kan %ror = or i16 %0, %2 347*5c68c6d7SShengchen Kan ret i16 %ror 348*5c68c6d7SShengchen Kan} 349*5c68c6d7SShengchen Kan 350*5c68c6d7SShengchen Kandefine i32 @ror32rcl(i32 noundef %a, i32 %cl) { 351*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32rcl: 352*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 353*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 354*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 355*5c68c6d7SShengchen Kan; CHECK-NEXT: rorl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xcf] 356*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 357*5c68c6d7SShengchen Kanentry: 358*5c68c6d7SShengchen Kan %0 = lshr i32 %a, %cl 359*5c68c6d7SShengchen Kan %1 = sub i32 32, %cl 360*5c68c6d7SShengchen Kan %2 = shl i32 %a, %1 361*5c68c6d7SShengchen Kan %ror = or i32 %0, %2 362*5c68c6d7SShengchen Kan ret i32 %ror 363*5c68c6d7SShengchen Kan} 364*5c68c6d7SShengchen Kan 365*5c68c6d7SShengchen Kandefine i32 @ror32rcl_mask(i32 noundef %a, i32 %cl) { 366*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32rcl_mask: 367*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 368*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 369*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 370*5c68c6d7SShengchen Kan; CHECK-NEXT: rorl %cl, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xd3,0xcf] 371*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 372*5c68c6d7SShengchen Kanentry: 373*5c68c6d7SShengchen Kan %shamt = and i32 %cl, 31 374*5c68c6d7SShengchen Kan %0 = lshr i32 %a, %shamt 375*5c68c6d7SShengchen Kan %1 = sub i32 32, %shamt 376*5c68c6d7SShengchen Kan %2 = shl i32 %a, %1 377*5c68c6d7SShengchen Kan %ror = or i32 %0, %2 378*5c68c6d7SShengchen Kan ret i32 %ror 379*5c68c6d7SShengchen Kan} 380*5c68c6d7SShengchen Kan 381*5c68c6d7SShengchen Kandefine i64 @ror64rcl(i64 noundef %a, i64 %cl) { 382*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64rcl: 383*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 384*5c68c6d7SShengchen Kan; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1] 385*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx 386*5c68c6d7SShengchen Kan; CHECK-NEXT: rorq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xcf] 387*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 388*5c68c6d7SShengchen Kanentry: 389*5c68c6d7SShengchen Kan %0 = lshr i64 %a, %cl 390*5c68c6d7SShengchen Kan %1 = sub i64 64, %cl 391*5c68c6d7SShengchen Kan %2 = shl i64 %a, %1 392*5c68c6d7SShengchen Kan %ror = or i64 %0, %2 393*5c68c6d7SShengchen Kan ret i64 %ror 394*5c68c6d7SShengchen Kan} 395*5c68c6d7SShengchen Kan 396*5c68c6d7SShengchen Kandefine i64 @ror64rcl_mask(i64 noundef %a, i64 %cl) { 397*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64rcl_mask: 398*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 399*5c68c6d7SShengchen Kan; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1] 400*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx 401*5c68c6d7SShengchen Kan; CHECK-NEXT: rorq %cl, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xd3,0xcf] 402*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 403*5c68c6d7SShengchen Kanentry: 404*5c68c6d7SShengchen Kan %shamt = and i64 %cl, 63 405*5c68c6d7SShengchen Kan %0 = lshr i64 %a, %shamt 406*5c68c6d7SShengchen Kan %1 = sub i64 64, %shamt 407*5c68c6d7SShengchen Kan %2 = shl i64 %a, %1 408*5c68c6d7SShengchen Kan %ror = or i64 %0, %2 409*5c68c6d7SShengchen Kan ret i64 %ror 410*5c68c6d7SShengchen Kan} 411*5c68c6d7SShengchen Kan 412*5c68c6d7SShengchen Kandefine i8 @ror8ri(i8 noundef %a) { 413*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8ri: 414*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 415*5c68c6d7SShengchen Kan; CHECK-NEXT: rolb $5, %dil, %al # encoding: [0x62,0xf4,0x7c,0x18,0xc0,0xc7,0x05] 416*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 417*5c68c6d7SShengchen Kanentry: 418*5c68c6d7SShengchen Kan %0 = lshr i8 %a, 3 419*5c68c6d7SShengchen Kan %1 = shl i8 %a, 5 420*5c68c6d7SShengchen Kan %ror = or i8 %0, %1 421*5c68c6d7SShengchen Kan ret i8 %ror 422*5c68c6d7SShengchen Kan} 423*5c68c6d7SShengchen Kan 424*5c68c6d7SShengchen Kandefine i16 @ror16ri(i16 noundef %a) { 425*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16ri: 426*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 427*5c68c6d7SShengchen Kan; CHECK-NEXT: rolw $13, %di, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xc7,0x0d] 428*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 429*5c68c6d7SShengchen Kanentry: 430*5c68c6d7SShengchen Kan %0 = lshr i16 %a, 3 431*5c68c6d7SShengchen Kan %1 = shl i16 %a, 13 432*5c68c6d7SShengchen Kan %ror = or i16 %0, %1 433*5c68c6d7SShengchen Kan ret i16 %ror 434*5c68c6d7SShengchen Kan} 435*5c68c6d7SShengchen Kan 436*5c68c6d7SShengchen Kandefine i32 @ror32ri(i32 noundef %a) { 437*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32ri: 438*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 439*5c68c6d7SShengchen Kan; CHECK-NEXT: roll $29, %edi, %eax # encoding: [0x62,0xf4,0x7c,0x18,0xc1,0xc7,0x1d] 440*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 441*5c68c6d7SShengchen Kanentry: 442*5c68c6d7SShengchen Kan %0 = lshr i32 %a, 3 443*5c68c6d7SShengchen Kan %1 = shl i32 %a, 29 444*5c68c6d7SShengchen Kan %ror = or i32 %0, %1 445*5c68c6d7SShengchen Kan ret i32 %ror 446*5c68c6d7SShengchen Kan} 447*5c68c6d7SShengchen Kan 448*5c68c6d7SShengchen Kandefine i64 @ror64ri(i64 noundef %a) { 449*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64ri: 450*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 451*5c68c6d7SShengchen Kan; CHECK-NEXT: rolq $61, %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x18,0xc1,0xc7,0x3d] 452*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 453*5c68c6d7SShengchen Kanentry: 454*5c68c6d7SShengchen Kan %0 = lshr i64 %a, 3 455*5c68c6d7SShengchen Kan %1 = shl i64 %a, 61 456*5c68c6d7SShengchen Kan %ror = or i64 %0, %1 457*5c68c6d7SShengchen Kan ret i64 %ror 458*5c68c6d7SShengchen Kan} 459*5c68c6d7SShengchen Kan 460*5c68c6d7SShengchen Kandefine void @ror8m1_legacy(ptr %ptr) { 461*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8m1_legacy: 462*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 463*5c68c6d7SShengchen Kan; CHECK-NEXT: rorb (%rdi) # encoding: [0xd0,0x0f] 464*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 465*5c68c6d7SShengchen Kanentry: 466*5c68c6d7SShengchen Kan %a = load i8, ptr %ptr 467*5c68c6d7SShengchen Kan %0 = lshr i8 %a, 1 468*5c68c6d7SShengchen Kan %1 = shl i8 %a, 7 469*5c68c6d7SShengchen Kan %ror = or i8 %0, %1 470*5c68c6d7SShengchen Kan store i8 %ror, ptr %ptr 471*5c68c6d7SShengchen Kan ret void 472*5c68c6d7SShengchen Kan} 473*5c68c6d7SShengchen Kan 474*5c68c6d7SShengchen Kandefine void @ror16m1_legacy(ptr %ptr) { 475*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16m1_legacy: 476*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 477*5c68c6d7SShengchen Kan; CHECK-NEXT: rorw (%rdi) # encoding: [0x66,0xd1,0x0f] 478*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 479*5c68c6d7SShengchen Kanentry: 480*5c68c6d7SShengchen Kan %a = load i16, ptr %ptr 481*5c68c6d7SShengchen Kan %0 = lshr i16 %a, 1 482*5c68c6d7SShengchen Kan %1 = shl i16 %a, 15 483*5c68c6d7SShengchen Kan %ror = or i16 %0, %1 484*5c68c6d7SShengchen Kan store i16 %ror, ptr %ptr 485*5c68c6d7SShengchen Kan ret void 486*5c68c6d7SShengchen Kan} 487*5c68c6d7SShengchen Kan 488*5c68c6d7SShengchen Kandefine void @ror32m1_legacy(ptr %ptr) { 489*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32m1_legacy: 490*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 491*5c68c6d7SShengchen Kan; CHECK-NEXT: rorl (%rdi) # encoding: [0xd1,0x0f] 492*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 493*5c68c6d7SShengchen Kanentry: 494*5c68c6d7SShengchen Kan %a = load i32, ptr %ptr 495*5c68c6d7SShengchen Kan %0 = lshr i32 %a, 1 496*5c68c6d7SShengchen Kan %1 = shl i32 %a, 31 497*5c68c6d7SShengchen Kan %ror = or i32 %0, %1 498*5c68c6d7SShengchen Kan store i32 %ror, ptr %ptr 499*5c68c6d7SShengchen Kan ret void 500*5c68c6d7SShengchen Kan} 501*5c68c6d7SShengchen Kan 502*5c68c6d7SShengchen Kandefine void @ror64m1_legacy(ptr %ptr) { 503*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64m1_legacy: 504*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 505*5c68c6d7SShengchen Kan; CHECK-NEXT: rorq (%rdi) # encoding: [0x48,0xd1,0x0f] 506*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 507*5c68c6d7SShengchen Kanentry: 508*5c68c6d7SShengchen Kan %a = load i64, ptr %ptr 509*5c68c6d7SShengchen Kan %0 = lshr i64 %a, 1 510*5c68c6d7SShengchen Kan %1 = shl i64 %a, 63 511*5c68c6d7SShengchen Kan %ror = or i64 %0, %1 512*5c68c6d7SShengchen Kan store i64 %ror, ptr %ptr 513*5c68c6d7SShengchen Kan ret void 514*5c68c6d7SShengchen Kan} 515*5c68c6d7SShengchen Kan 516*5c68c6d7SShengchen Kandefine void @ror8mcl_legacy(ptr %ptr, i8 %cl) { 517*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mcl_legacy: 518*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 519*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 520*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 521*5c68c6d7SShengchen Kan; CHECK-NEXT: rorb %cl, (%rdi) # encoding: [0xd2,0x0f] 522*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 523*5c68c6d7SShengchen Kanentry: 524*5c68c6d7SShengchen Kan %a = load i8, ptr %ptr 525*5c68c6d7SShengchen Kan %0 = lshr i8 %a, %cl 526*5c68c6d7SShengchen Kan %1 = sub i8 8, %cl 527*5c68c6d7SShengchen Kan %2 = shl i8 %a, %1 528*5c68c6d7SShengchen Kan %ror = or i8 %0, %2 529*5c68c6d7SShengchen Kan store i8 %ror, ptr %ptr 530*5c68c6d7SShengchen Kan ret void 531*5c68c6d7SShengchen Kan} 532*5c68c6d7SShengchen Kan 533*5c68c6d7SShengchen Kandefine void @ror16mcl_legacy(ptr %ptr, i16 %cl) { 534*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mcl_legacy: 535*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 536*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 537*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 538*5c68c6d7SShengchen Kan; CHECK-NEXT: rorw %cl, (%rdi) # encoding: [0x66,0xd3,0x0f] 539*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 540*5c68c6d7SShengchen Kanentry: 541*5c68c6d7SShengchen Kan %a = load i16, ptr %ptr 542*5c68c6d7SShengchen Kan %0 = lshr i16 %a, %cl 543*5c68c6d7SShengchen Kan %1 = sub i16 16, %cl 544*5c68c6d7SShengchen Kan %2 = shl i16 %a, %1 545*5c68c6d7SShengchen Kan %ror = or i16 %0, %2 546*5c68c6d7SShengchen Kan store i16 %ror, ptr %ptr 547*5c68c6d7SShengchen Kan ret void 548*5c68c6d7SShengchen Kan} 549*5c68c6d7SShengchen Kan 550*5c68c6d7SShengchen Kandefine void @ror32mcl_legacy(ptr %ptr, i32 %cl) { 551*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mcl_legacy: 552*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 553*5c68c6d7SShengchen Kan; CHECK-NEXT: movl %esi, %ecx # encoding: [0x89,0xf1] 554*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx 555*5c68c6d7SShengchen Kan; CHECK-NEXT: rorl %cl, (%rdi) # encoding: [0xd3,0x0f] 556*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 557*5c68c6d7SShengchen Kanentry: 558*5c68c6d7SShengchen Kan %a = load i32, ptr %ptr 559*5c68c6d7SShengchen Kan %0 = lshr i32 %a, %cl 560*5c68c6d7SShengchen Kan %1 = sub i32 32, %cl 561*5c68c6d7SShengchen Kan %2 = shl i32 %a, %1 562*5c68c6d7SShengchen Kan %ror = or i32 %0, %2 563*5c68c6d7SShengchen Kan store i32 %ror, ptr %ptr 564*5c68c6d7SShengchen Kan ret void 565*5c68c6d7SShengchen Kan} 566*5c68c6d7SShengchen Kan 567*5c68c6d7SShengchen Kandefine void @ror64mcl_legacy(ptr %ptr, i64 %cl) { 568*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mcl_legacy: 569*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 570*5c68c6d7SShengchen Kan; CHECK-NEXT: movq %rsi, %rcx # encoding: [0x48,0x89,0xf1] 571*5c68c6d7SShengchen Kan; CHECK-NEXT: # kill: def $cl killed $cl killed $rcx 572*5c68c6d7SShengchen Kan; CHECK-NEXT: rorq %cl, (%rdi) # encoding: [0x48,0xd3,0x0f] 573*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 574*5c68c6d7SShengchen Kanentry: 575*5c68c6d7SShengchen Kan %a = load i64, ptr %ptr 576*5c68c6d7SShengchen Kan %0 = lshr i64 %a, %cl 577*5c68c6d7SShengchen Kan %1 = sub i64 64, %cl 578*5c68c6d7SShengchen Kan %2 = shl i64 %a, %1 579*5c68c6d7SShengchen Kan %ror = or i64 %0, %2 580*5c68c6d7SShengchen Kan store i64 %ror, ptr %ptr 581*5c68c6d7SShengchen Kan ret void 582*5c68c6d7SShengchen Kan} 583*5c68c6d7SShengchen Kan 584*5c68c6d7SShengchen Kandefine void @ror8mi_legacy(ptr %ptr) { 585*5c68c6d7SShengchen Kan; CHECK-LABEL: ror8mi_legacy: 586*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 587*5c68c6d7SShengchen Kan; CHECK-NEXT: rolb $5, (%rdi) # encoding: [0xc0,0x07,0x05] 588*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 589*5c68c6d7SShengchen Kanentry: 590*5c68c6d7SShengchen Kan %a = load i8, ptr %ptr 591*5c68c6d7SShengchen Kan %0 = lshr i8 %a, 3 592*5c68c6d7SShengchen Kan %1 = shl i8 %a, 5 593*5c68c6d7SShengchen Kan %ror = or i8 %0, %1 594*5c68c6d7SShengchen Kan store i8 %ror, ptr %ptr 595*5c68c6d7SShengchen Kan ret void 596*5c68c6d7SShengchen Kan} 597*5c68c6d7SShengchen Kan 598*5c68c6d7SShengchen Kandefine void @ror16mi_legacy(ptr %ptr) { 599*5c68c6d7SShengchen Kan; CHECK-LABEL: ror16mi_legacy: 600*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 601*5c68c6d7SShengchen Kan; CHECK-NEXT: rolw $13, (%rdi) # encoding: [0x66,0xc1,0x07,0x0d] 602*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 603*5c68c6d7SShengchen Kanentry: 604*5c68c6d7SShengchen Kan %a = load i16, ptr %ptr 605*5c68c6d7SShengchen Kan %0 = lshr i16 %a, 3 606*5c68c6d7SShengchen Kan %1 = shl i16 %a, 13 607*5c68c6d7SShengchen Kan %ror = or i16 %0, %1 608*5c68c6d7SShengchen Kan store i16 %ror, ptr %ptr 609*5c68c6d7SShengchen Kan ret void 610*5c68c6d7SShengchen Kan} 611*5c68c6d7SShengchen Kan 612*5c68c6d7SShengchen Kandefine void @ror32mi_legacy(ptr %ptr) { 613*5c68c6d7SShengchen Kan; CHECK-LABEL: ror32mi_legacy: 614*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 615*5c68c6d7SShengchen Kan; CHECK-NEXT: roll $29, (%rdi) # encoding: [0xc1,0x07,0x1d] 616*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 617*5c68c6d7SShengchen Kanentry: 618*5c68c6d7SShengchen Kan %a = load i32, ptr %ptr 619*5c68c6d7SShengchen Kan %0 = lshr i32 %a, 3 620*5c68c6d7SShengchen Kan %1 = shl i32 %a, 29 621*5c68c6d7SShengchen Kan %ror = or i32 %0, %1 622*5c68c6d7SShengchen Kan store i32 %ror, ptr %ptr 623*5c68c6d7SShengchen Kan ret void 624*5c68c6d7SShengchen Kan} 625*5c68c6d7SShengchen Kan 626*5c68c6d7SShengchen Kandefine void @ror64mi_legacy(ptr %ptr) { 627*5c68c6d7SShengchen Kan; CHECK-LABEL: ror64mi_legacy: 628*5c68c6d7SShengchen Kan; CHECK: # %bb.0: # %entry 629*5c68c6d7SShengchen Kan; CHECK-NEXT: rolq $61, (%rdi) # encoding: [0x48,0xc1,0x07,0x3d] 630*5c68c6d7SShengchen Kan; CHECK-NEXT: retq # encoding: [0xc3] 631*5c68c6d7SShengchen Kanentry: 632*5c68c6d7SShengchen Kan %a = load i64, ptr %ptr 633*5c68c6d7SShengchen Kan %0 = lshr i64 %a, 3 634*5c68c6d7SShengchen Kan %1 = shl i64 %a, 61 635*5c68c6d7SShengchen Kan %ror = or i64 %0, %1 636*5c68c6d7SShengchen Kan store i64 %ror, ptr %ptr 637*5c68c6d7SShengchen Kan ret void 638*5c68c6d7SShengchen Kan} 639