Skip to content

Commit 9ff50a3

Browse files
chbessonovaasl
authored andcommitted
[MSP430] Print 0(Rn) as [at]Rn
1 parent 8824602 commit 9ff50a3

12 files changed

Lines changed: 36 additions & 27 deletions

File tree

src/llvm/lib/Target/MSP430/InstPrinter/MSP430InstPrinter.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ void MSP430InstPrinter::printSrcMemOperand(const MCInst *MI, unsigned OpNo,
6969
const char *Modifier) {
7070
const MCOperand &Base = MI->getOperand(OpNo);
7171
const MCOperand &Disp = MI->getOperand(OpNo+1);
72-
73-
// Print displacement first
72+
assert(Disp.isImm() ||
73+
Disp.isExpr() && "Unexpected type in displacement field");
7474

7575
// If the global address expression is a part of displacement field with a
7676
// register base, we should not emit any prefix symbol here, e.g.
@@ -81,17 +81,26 @@ void MSP430InstPrinter::printSrcMemOperand(const MCInst *MI, unsigned OpNo,
8181
if (Base.getReg() == MSP430::SR)
8282
O << '&';
8383

84+
if (Base.getReg() == MSP430::SR || Base.getReg() == MSP430::PC) {
85+
if (Disp.isExpr())
86+
Disp.getExpr()->print(O, &MAI);
87+
else
88+
O << Disp.getImm();
89+
return;
90+
}
91+
92+
// Print 0(Rn) as @Rn
93+
if (Disp.isImm() && Disp.getImm() == 0) {
94+
O << '@' << getRegisterName(Base.getReg());
95+
return;
96+
}
97+
8498
if (Disp.isExpr())
8599
Disp.getExpr()->print(O, &MAI);
86-
else {
87-
assert(Disp.isImm() && "Expected immediate in displacement field");
100+
else
88101
O << Disp.getImm();
89-
}
90102

91-
// Print register base field
92-
if ((Base.getReg() != MSP430::SR) &&
93-
(Base.getReg() != MSP430::PC))
94-
O << '(' << getRegisterName(Base.getReg()) << ')';
103+
O << '(' << getRegisterName(Base.getReg()) << ')';
95104
}
96105

97106
void MSP430InstPrinter::printIndRegOperand(const MCInst *MI, unsigned OpNo,

src/llvm/test/CodeGen/MSP430/AddrMode-bis-rx.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ define i16 @am1(i16 %x, i16* %a) nounwind {
88
ret i16 %2
99
}
1010
; CHECK-LABEL: am1:
11-
; CHECK: bis 0(r13), r12
11+
; CHECK: bis @r13, r12
1212

1313
@foo = external global i16
1414

src/llvm/test/CodeGen/MSP430/AddrMode-bis-xr.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ define void @am1(i16* %a, i16 %x) nounwind {
99
ret void
1010
}
1111
; CHECK-LABEL: am1:
12-
; CHECK: bis r13, 0(r12)
12+
; CHECK: bis r13, @r12
1313

1414
@foo = external global i16
1515

src/llvm/test/CodeGen/MSP430/AddrMode-mov-rx.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ define i16 @am1(i16* %a) nounwind {
77
ret i16 %1
88
}
99
; CHECK-LABEL: am1:
10-
; CHECK: mov 0(r12), r12
10+
; CHECK: mov @r12, r12
1111

1212
@foo = external global i16
1313

src/llvm/test/CodeGen/MSP430/AddrMode-mov-xr.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ define void @am1(i16* %a, i16 %b) nounwind {
77
ret void
88
}
99
; CHECK-LABEL: am1:
10-
; CHECK: mov r13, 0(r12)
10+
; CHECK: mov r13, @r12
1111

1212
@foo = external global i16
1313

src/llvm/test/CodeGen/MSP430/Inst16mm.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,5 @@ entry:
6565
ret i16 %0
6666
; CHECK-LABEL: mov2:
6767
; CHECK-DAG: mov 2(r1), 6(r1)
68-
; CHECK-DAG: mov 0(r1), 4(r1)
68+
; CHECK-DAG: mov @r1, 4(r1)
6969
}

src/llvm/test/CodeGen/MSP430/byval.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ entry:
2020
; CHECK-LABEL: caller:
2121
; CHECK: mov &foo+4, 4(r1)
2222
; CHECK-NEXT: mov &foo+2, 2(r1)
23-
; CHECK-NEXT: mov &foo, 0(r1)
23+
; CHECK-NEXT: mov &foo, @r1
2424
%call = call i16 @callee(%struct.Foo* byval @foo)
2525
ret void
2626
}

src/llvm/test/CodeGen/MSP430/cc_args.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ entry:
3737
; CHECK: call #f_i16_i32_i16
3838
call void @f_i16_i32_i16(i16 1, i32 16909060, i16 2)
3939

40-
; CHECK: mov #1286, 0(r1)
40+
; CHECK: mov #1286, @r1
4141
; CHECK: mov #1, r12
4242
; CHECK: mov #772, r13
4343
; CHECK: mov #258, r14
@@ -48,7 +48,7 @@ entry:
4848
; CHECK: mov #258, 6(r1)
4949
; CHECK: mov #772, 4(r1)
5050
; CHECK: mov #1286, 2(r1)
51-
; CHECK: mov #1800, 0(r1)
51+
; CHECK: mov #1800, @r1
5252
; CHECK: mov #1, r12
5353
; CHECK: mov #2, r13
5454
; CHECK: call #f_i16_i64_i16
@@ -60,7 +60,7 @@ entry:
6060
; CHECK: mov #258, 6(r1)
6161
; CHECK: mov #772, 4(r1)
6262
; CHECK: mov #1286, 2(r1)
63-
; CHECK: mov #1800, 0(r1)
63+
; CHECK: mov #1800, @r1
6464
; CHECK: mov #1, r12
6565
; CHECK: mov #772, r13
6666
; CHECK: mov #258, r14
@@ -69,7 +69,7 @@ entry:
6969
; CHECK: mov #258, 6(r1)
7070
; CHECK: mov #772, 4(r1)
7171
; CHECK: mov #1286, 2(r1)
72-
; CHECK: mov #1800, 0(r1)
72+
; CHECK: mov #1800, @r1
7373
; CHECK: mov #1800, r12
7474
; CHECK: mov #1286, r13
7575
; CHECK: mov #772, r14

src/llvm/test/CodeGen/MSP430/jumptable.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ define i16 @test(i16 %i) #0 {
88
entry:
99
; CHECK-LABEL: test:
1010
; CHECK: sub #4, r1
11-
; CHECK-NEXT: mov r12, 0(r1)
11+
; CHECK-NEXT: mov r12, @r1
1212
; CHECK-NEXT: cmp #4, r12
1313
; CHECK-NEXT: jhs .LBB0_3
1414
%retval = alloca i16, align 2

src/llvm/test/CodeGen/MSP430/struct-return.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ define %s @fred() #0 {
1616
; CHECK: mov #258, 6(r12)
1717
; CHECK: mov #772, 4(r12)
1818
; CHECK: mov #1286, 2(r12)
19-
; CHECK: mov #1800, 0(r12)
19+
; CHECK: mov #1800, @r12
2020
ret %s {i64 72623859790382856, i64 651345242494996224}
2121
}
2222

@@ -37,7 +37,7 @@ define void @test() #1 {
3737

3838
define void @sret(%struct.S* noalias nocapture sret) #0 {
3939
; CHECK-LABEL: sret:
40-
; CHECK: mov &a, 0(r12)
40+
; CHECK: mov &a, @r12
4141
; CHECK: mov &b, 2(r12)
4242
; CHECK: mov &c, 4(r12)
4343
%2 = getelementptr inbounds %struct.S, %struct.S* %0, i16 0, i32 0

0 commit comments

Comments
 (0)