112 lines · plain
1; RUN: llc -mtriple=arm-eabi -mattr=+v6 %s -o - | FileCheck %s2 3; CHECK: test14; CHECK: pkhbt r0, r0, r1, lsl #165define i32 @test1(i32 %X, i32 %Y) {6 %tmp1 = and i32 %X, 655357 %tmp4 = shl i32 %Y, 168 %tmp5 = or i32 %tmp4, %tmp19 ret i32 %tmp510}11 12; CHECK: test213; CHECK: pkhbt r0, r0, r1, lsl #1214define i32 @test2(i32 %X, i32 %Y) {15 %tmp1 = and i32 %X, 6553516 %tmp3 = shl i32 %Y, 1217 %tmp4 = and i32 %tmp3, -6553618 %tmp57 = or i32 %tmp4, %tmp119 ret i32 %tmp5720}21 22; CHECK: test323; CHECK: pkhbt r0, r0, r1, lsl #1824define i32 @test3(i32 %X, i32 %Y) {25 %tmp19 = and i32 %X, 6553526 %tmp37 = shl i32 %Y, 1827 %tmp5 = or i32 %tmp37, %tmp1928 ret i32 %tmp529}30 31; CHECK: test432; CHECK: pkhbt r0, r0, r133define i32 @test4(i32 %X, i32 %Y) {34 %tmp1 = and i32 %X, 6553535 %tmp3 = and i32 %Y, -6553636 %tmp46 = or i32 %tmp3, %tmp137 ret i32 %tmp4638}39 40; CHECK: test541; CHECK: pkhtb r0, r0, r1, asr #1642define i32 @test5(i32 %X, i32 %Y) {43 %tmp17 = and i32 %X, -6553644 %tmp2 = bitcast i32 %Y to i3245 %tmp4 = lshr i32 %tmp2, 1646 %tmp5 = or i32 %tmp4, %tmp1747 ret i32 %tmp548}49 50; CHECK: test5a51; CHECK: pkhtb r0, r0, r1, asr #1652define i32 @test5a(i32 %X, i32 %Y) {53 %tmp110 = and i32 %X, -6553654 %tmp37 = lshr i32 %Y, 1655 %tmp39 = bitcast i32 %tmp37 to i3256 %tmp5 = or i32 %tmp39, %tmp11057 ret i32 %tmp558}59 60; CHECK: test661; CHECK: pkhtb r0, r0, r1, asr #1262define i32 @test6(i32 %X, i32 %Y) {63 %tmp1 = and i32 %X, -6553664 %tmp37 = lshr i32 %Y, 1265 %tmp38 = bitcast i32 %tmp37 to i3266 %tmp4 = and i32 %tmp38, 6553567 %tmp59 = or i32 %tmp4, %tmp168 ret i32 %tmp5969}70 71; CHECK: test772; CHECK: pkhtb r0, r0, r1, asr #1873define i32 @test7(i32 %X, i32 %Y) {74 %tmp1 = and i32 %X, -6553675 %tmp3 = ashr i32 %Y, 1876 %tmp4 = and i32 %tmp3, 6553577 %tmp57 = or i32 %tmp4, %tmp178 ret i32 %tmp5779}80 81; Arithmetic and logic right shift does not have the same semantics if shifting82; by more than 16 in this context.83 84; CHECK: test885; CHECK-NOT: pkhtb r0, r0, r1, asr #2286define i32 @test8(i32 %X, i32 %Y) {87 %tmp1 = and i32 %X, -6553688 %tmp3 = lshr i32 %Y, 2289 %tmp57 = or i32 %tmp3, %tmp190 ret i32 %tmp5791}92 93; CHECK-LABEL: test9:94; CHECK: pkhtb r0, r0, r1, asr #1695define i32 @test9(i32 %src1, i32 %src2) {96entry:97 %tmp = and i32 %src1, -6553698 %tmp2 = lshr i32 %src2, 1699 %tmp3 = or i32 %tmp, %tmp2100 ret i32 %tmp3101}102 103; CHECK-LABEL: test10:104; CHECK: pkhtb r0, r0, r1, asr #17105define i32 @test10(i32 %src1, i32 %src2) {106entry:107 %tmp = and i32 %src1, -65536108 %tmp2 = ashr i32 %src2, 17109 %tmp3 = or i32 %tmp, %tmp2110 ret i32 %tmp3111}112