blob: 596d5b045beb52f7867a4d4cdafa8fb352103ced [file] [log] [blame]
Anton Korobeynikov29ffb6d2019-01-10 22:54:53 +00001; RUN: llc -march=msp430 < %s | FileCheck %s
2target datalayout = "e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8"
3target triple = "msp430-generic-generic"
4
5define void @rra8m(i8* %i) {
6entry:
7; CHECK-LABEL: rra8m:
8; CHECK: rra.b 2(r12)
9 %0 = getelementptr inbounds i8, i8* %i, i16 2
10 %1 = load i8, i8* %0, align 1
11 %shr = ashr i8 %1, 1
12 store i8 %shr, i8* %0, align 1
13 ret void
14}
15
16define void @rra16m(i16* %i) {
17entry:
18; CHECK-LABEL: rra16m:
19; CHECK: rra 4(r12)
20 %0 = getelementptr inbounds i16, i16* %i, i16 2
21 %1 = load i16, i16* %0, align 2
22 %shr = ashr i16 %1, 1
23 store i16 %shr, i16* %0, align 2
24 ret void
25}
26
27; TODO: `clrc; rrc.b 2(r12)` is expected
28define void @rrc8m(i8* %g) {
29entry:
30; CHECK-LABEL: rrc8m:
31; CHECK: mov.b 2(r12), r13
32; CHECK: clrc
33; CHECK: rrc.b r13
34; CHECK: mov.b r13, 2(r12)
35 %add.ptr = getelementptr inbounds i8, i8* %g, i16 2
36 %0 = load i8, i8* %add.ptr, align 1
37 %1 = lshr i8 %0, 1
38 store i8 %1, i8* %add.ptr, align 1
39 ret void
40}
41
42; TODO: `clrc; rrc 4(r12)` is expected
43define void @rrc16m(i16* %g) {
44entry:
45; CHECK-LABEL: rrc16m:
46; CHECK: mov 4(r12), r13
47; CHECK: clrc
48; CHECK: rrc r13
49; CHECK: mov r13, 4(r12)
50 %add.ptr = getelementptr inbounds i16, i16* %g, i16 2
51 %0 = load i16, i16* %add.ptr, align 2
52 %shr = lshr i16 %0, 1
53 store i16 %shr, i16* %add.ptr, align 2
54 ret void
55}
56
57define void @sxt16m(i16* %x) {
58entry:
59; CHECK-LABEL: sxt16m:
60; CHECK: sxt 4(r12)
61 %add.ptr = getelementptr inbounds i16, i16* %x, i16 2
62 %0 = bitcast i16* %add.ptr to i8*
63 %1 = load i8, i8* %0, align 1
64 %conv = sext i8 %1 to i16
65 store i16 %conv, i16* %add.ptr, align 2
66 ret void
67}
68