brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 19af539 Raw
217 lines · plain
1; RUN: llc -mtriple=hexagon < %s | FileCheck %s2 3target triple = "hexagon"4 5; CHECK-LABEL: f06; CHECK: r0 = rol(r0,#7)7define i32 @f0(i32 %a0) #0 {8b0:9  %v0 = shl i32 %a0, 710  %v1 = lshr i32 %a0, 2511  %v2 = or i32 %v0, %v112  ret i32 %v213}14 15; CHECK-LABEL: f116; This is a rotate left by %a1(r1). Use register-pair shift to implement it.17; CHECK: r[[R10:[0-9]+]]:[[R11:[0-9]+]] = combine(r0,r0)18; CHECK: r[[R12:[0-9]+]]:[[R13:[0-9]+]] = asl(r[[R10]]:[[R11]],r1)19; CHECK: r0 = r[[R12]]20define i32 @f1(i32 %a0, i32 %a1) #0 {21b0:22  %v0 = shl i32 %a0, %a123  %v1 = sub i32 32, %a124  %v2 = lshr i32 %a0, %v125  %v3 = or i32 %v2, %v026  ret i32 %v327}28 29; CHECK-LABEL: f230; CHECK: r0 = rol(r0,#25)31define i32 @f2(i32 %a0) #0 {32b0:33  %v0 = lshr i32 %a0, 734  %v1 = shl i32 %a0, 2535  %v2 = or i32 %v0, %v136  ret i32 %v237}38 39; CHECK-LABEL: f340; This is a rotate right by %a1(r1). Use register-pair shift to implement it.41; CHECK: r[[R30:[0-9]+]]:[[R31:[0-9]+]] = combine(r0,r0)42; CHECK: r[[R32:[0-9]+]]:[[R33:[0-9]+]] = lsr(r[[R30]]:[[R31]],r1)43define i32 @f3(i32 %a0, i32 %a1) #0 {44b0:45  %v0 = lshr i32 %a0, %a146  %v1 = sub i32 32, %a147  %v2 = shl i32 %a0, %v148  %v3 = or i32 %v2, %v049  ret i32 %v350}51 52; CHECK-LABEL: f453; CHECK: r1:0 = rol(r1:0,#7)54define i64 @f4(i64 %a0) #0 {55b0:56  %v0 = shl i64 %a0, 757  %v1 = lshr i64 %a0, 5758  %v2 = or i64 %v0, %v159  ret i64 %v260}61 62; CHECK-LABEL: f563; This is a rotate left by %a1(r2).64; CHECK: r[[R50:[0-9]+]]:[[R51:[0-9]+]] = asl(r1:0,r2)65; CHECK: r[[R52:[0-9]+]] = sub(#64,r2)66; CHECK: r[[R50]]:[[R51]] |= lsr(r1:0,r[[R52]])67define i64 @f5(i64 %a0, i32 %a1) #0 {68b0:69  %v0 = zext i32 %a1 to i6470  %v1 = shl i64 %a0, %v071  %v2 = sub i32 64, %a172  %v3 = zext i32 %v2 to i6473  %v4 = lshr i64 %a0, %v374  %v5 = or i64 %v4, %v175  ret i64 %v576}77 78; CHECK-LABEL: f679; CHECK: r1:0 = rol(r1:0,#57)80define i64 @f6(i64 %a0) #0 {81b0:82  %v0 = lshr i64 %a0, 783  %v1 = shl i64 %a0, 5784  %v2 = or i64 %v0, %v185  ret i64 %v286}87 88; CHECK-LABEL: f789; This is a rotate right by %a1(r2).90; CHECK: r[[R70:[0-9]+]]:[[R71:[0-9]+]] = lsr(r1:0,r2)91; CHECK: r[[R72:[0-9]+]] = sub(#64,r2)92; CHECK: r[[R70]]:[[R71]] |= asl(r1:0,r[[R72]])93define i64 @f7(i64 %a0, i32 %a1) #0 {94b0:95  %v0 = zext i32 %a1 to i6496  %v1 = lshr i64 %a0, %v097  %v2 = sub i32 64, %a198  %v3 = zext i32 %v2 to i6499  %v4 = shl i64 %a0, %v3100  %v5 = or i64 %v4, %v1101  ret i64 %v5102}103 104; CHECK-LABEL: f8105; CHECK: r0 += rol(r1,#7)106define i32 @f8(i32 %a0, i32 %a1) #0 {107b0:108  %v0 = shl i32 %a1, 7109  %v1 = lshr i32 %a1, 25110  %v2 = or i32 %v0, %v1111  %v3 = add i32 %v2, %a0112  ret i32 %v3113}114 115; CHECK-LABEL: f9116; CHECK: r0 -= rol(r1,#7)117define i32 @f9(i32 %a0, i32 %a1) #0 {118b0:119  %v0 = shl i32 %a1, 7120  %v1 = lshr i32 %a1, 25121  %v2 = or i32 %v0, %v1122  %v3 = sub i32 %a0, %v2123  ret i32 %v3124}125 126; CHECK-LABEL: f10127; CHECK: r0 &= rol(r1,#7)128define i32 @f10(i32 %a0, i32 %a1) #0 {129b0:130  %v0 = shl i32 %a1, 7131  %v1 = lshr i32 %a1, 25132  %v2 = or i32 %v0, %v1133  %v3 = and i32 %v2, %a0134  ret i32 %v3135}136 137; CHECK-LABEL: f11138; CHECK: r0 |= lsr(r1,#25)139; CHECK: r0 |= asl(r1,#7)140define i32 @f11(i32 %a0, i32 %a1) #0 {141b0:142  %v0 = shl i32 %a1, 7143  %v1 = lshr i32 %a1, 25144  %v2 = or i32 %v1, %a0145  %v3 = or i32 %v2, %v0146  ret i32 %v3147}148 149; CHECK-LABEL: f12150; CHECK: r0 ^= rol(r1,#7)151define i32 @f12(i32 %a0, i32 %a1) #0 {152b0:153  %v0 = shl i32 %a1, 7154  %v1 = lshr i32 %a1, 25155  %v2 = or i32 %v0, %v1156  %v3 = xor i32 %v2, %a0157  ret i32 %v3158}159 160; CHECK-LABEL: f13161; CHECK: r1:0 += rol(r3:2,#7)162define i64 @f13(i64 %a0, i64 %a1) #0 {163b0:164  %v0 = shl i64 %a1, 7165  %v1 = lshr i64 %a1, 57166  %v2 = or i64 %v0, %v1167  %v3 = add i64 %v2, %a0168  ret i64 %v3169}170 171; CHECK-LABEL: f14172; CHECK: r1:0 -= rol(r3:2,#7)173define i64 @f14(i64 %a0, i64 %a1) #0 {174b0:175  %v0 = shl i64 %a1, 7176  %v1 = lshr i64 %a1, 57177  %v2 = or i64 %v0, %v1178  %v3 = sub i64 %a0, %v2179  ret i64 %v3180}181 182; CHECK-LABEL: f15183; CHECK: r1:0 &= rol(r3:2,#7)184define i64 @f15(i64 %a0, i64 %a1) #0 {185b0:186  %v0 = shl i64 %a1, 7187  %v1 = lshr i64 %a1, 57188  %v2 = or i64 %v0, %v1189  %v3 = and i64 %v2, %a0190  ret i64 %v3191}192 193; CHECK-LABEL: f16194; CHECK: r1:0 |= lsr(r3:2,#57)195; CHECK: r1:0 |= asl(r3:2,#7)196define i64 @f16(i64 %a0, i64 %a1) #0 {197b0:198  %v0 = shl i64 %a1, 7199  %v1 = lshr i64 %a1, 57200  %v2 = or i64 %v1, %a0201  %v3 = or i64 %v2, %v0202  ret i64 %v3203}204 205; CHECK-LABEL: f17206; CHECK: r1:0 ^= rol(r3:2,#7)207define i64 @f17(i64 %a0, i64 %a1) #0 {208b0:209  %v0 = shl i64 %a1, 7210  %v1 = lshr i64 %a1, 57211  %v2 = or i64 %v0, %v1212  %v3 = xor i64 %v2, %a0213  ret i64 %v3214}215 216attributes #0 = { norecurse nounwind readnone "target-cpu"="hexagonv60" "target-features"="-packets" }217