1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=arm-eabi -mattr=+v6 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-V6 3; RUN: llc -mtriple=arm-eabi -mattr=+v7 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-V7 4 5define i32 @test0(i8 %A) { 6; CHECK-LABEL: test0: 7; CHECK: @ %bb.0: 8; CHECK-NEXT: sxtb r0, r0 9; CHECK-NEXT: bx lr 10 %B = sext i8 %A to i32 11 ret i32 %B 12} 13 14define signext i8 @test1(i32 %A) { 15; CHECK-V6-LABEL: test1: 16; CHECK-V6: @ %bb.0: 17; CHECK-V6-NEXT: lsr r0, r0, #8 18; CHECK-V6-NEXT: sxtb r0, r0 19; CHECK-V6-NEXT: bx lr 20; 21; CHECK-V7-LABEL: test1: 22; CHECK-V7: @ %bb.0: 23; CHECK-V7-NEXT: sbfx r0, r0, #8, #8 24; CHECK-V7-NEXT: bx lr 25; CHECk-V7: sbfx r0, r0, #8, #8 26 %B = lshr i32 %A, 8 27 %C = shl i32 %A, 24 28 %D = or i32 %B, %C 29 %E = trunc i32 %D to i8 30 ret i8 %E 31} 32 33define signext i32 @test2(i32 %A, i32 %X) { 34; CHECK-LABEL: test2: 35; CHECK: @ %bb.0: 36; CHECK-NEXT: sxtab r0, r1, r0, ror #8 37; CHECK-NEXT: bx lr 38 %B = lshr i32 %A, 8 39 %C = shl i32 %A, 24 40 %D = or i32 %B, %C 41 %E = trunc i32 %D to i8 42 %F = sext i8 %E to i32 43 %G = add i32 %F, %X 44 ret i32 %G 45} 46 47define signext i32 @test3(i32 %A, i32 %X) { 48; CHECK-LABEL: test3: 49; CHECK: @ %bb.0: 50; CHECK-NEXT: sxtab r0, r1, r0, ror #16 51; CHECK-NEXT: bx lr 52 %B = lshr i32 %A, 16 53 %C = shl i32 %A, 16 54 %D = or i32 %B, %C 55 %E = trunc i32 %D to i8 56 %F = sext i8 %E to i32 57 %G = add i32 %F, %X 58 ret i32 %G 59} 60 61define signext i32 @test4(i32 %A, i32 %X) { 62; CHECK-LABEL: test4: 63; CHECK: @ %bb.0: 64; CHECK-NEXT: sxtah r0, r1, r0, ror #8 65; CHECK-NEXT: bx lr 66 %B = lshr i32 %A, 8 67 %C = shl i32 %A, 24 68 %D = or i32 %B, %C 69 %E = trunc i32 %D to i16 70 %F = sext i16 %E to i32 71 %G = add i32 %F, %X 72 ret i32 %G 73} 74 75define signext i32 @test5(i32 %A, i32 %X) { 76; CHECK-LABEL: test5: 77; CHECK: @ %bb.0: 78; CHECK-NEXT: sxtah r0, r1, r0, ror #24 79; CHECK-NEXT: bx lr 80 %B = lshr i32 %A, 24 81 %C = shl i32 %A, 8 82 %D = or i32 %B, %C 83 %E = trunc i32 %D to i16 84 %F = sext i16 %E to i32 85 %G = add i32 %F, %X 86 ret i32 %G 87} 88 89define i32 @test6(i8 %A, i32 %X) { 90; CHECK-LABEL: test6: 91; CHECK: @ %bb.0: 92; CHECK-NEXT: sxtab r0, r1, r0 93; CHECK-NEXT: bx lr 94 %sext = sext i8 %A to i32 95 %add = add i32 %X, %sext 96 ret i32 %add 97} 98 99define i32 @test7(i32 %A, i32 %X) { 100; CHECK-LABEL: test7: 101; CHECK: @ %bb.0: 102; CHECK-NEXT: sxtab r0, r1, r0 103; CHECK-NEXT: bx lr 104 %shl = shl i32 %A, 24 105 %shr = ashr i32 %shl, 24 106 %add = add i32 %X, %shr 107 ret i32 %add 108} 109 110define i32 @test8(i16 %A, i32 %X) { 111; CHECK-LABEL: test8: 112; CHECK: @ %bb.0: 113; CHECK-NEXT: sxtah r0, r1, r0 114; CHECK-NEXT: bx lr 115 %sext = sext i16 %A to i32 116 %add = add i32 %X, %sext 117 ret i32 %add 118} 119 120define i32 @test9(i32 %A, i32 %X) { 121; CHECK-LABEL: test9: 122; CHECK: @ %bb.0: 123; CHECK-NEXT: sxtah r0, r1, r0 124; CHECK-NEXT: bx lr 125 %shl = shl i32 %A, 16 126 %shr = ashr i32 %shl, 16 127 %add = add i32 %X, %shr 128 ret i32 %add 129} 130