Skip to content

Commit 8b036c2

Browse files
committed
Backport #118015 and #121498
1 parent cd70802 commit 8b036c2

24 files changed

+60
-124
lines changed

llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.cpp

Lines changed: 1 addition & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,6 @@ namespace adjust {
3535

3636
using namespace llvm;
3737

38-
static void signed_width(unsigned Width, uint64_t Value,
39-
std::string Description, const MCFixup &Fixup,
40-
MCContext *Ctx = nullptr) {
41-
if (!isIntN(Width, Value)) {
42-
std::string Diagnostic = "out of range " + Description;
43-
44-
int64_t Min = minIntN(Width);
45-
int64_t Max = maxIntN(Width);
46-
47-
Diagnostic += " (expected an integer in the range " + std::to_string(Min) +
48-
" to " + std::to_string(Max) + ")";
49-
50-
if (Ctx) {
51-
Ctx->reportError(Fixup.getLoc(), Diagnostic);
52-
} else {
53-
llvm_unreachable(Diagnostic.c_str());
54-
}
55-
}
56-
}
57-
5838
static void unsigned_width(unsigned Width, uint64_t Value,
5939
std::string Description, const MCFixup &Fixup,
6040
MCContext *Ctx = nullptr) {
@@ -85,20 +65,6 @@ static void adjustBranch(unsigned Size, const MCFixup &Fixup, uint64_t &Value,
8565
AVR::fixups::adjustBranchTarget(Value);
8666
}
8767

88-
/// Adjusts the value of a relative branch target before fixup application.
89-
static void adjustRelativeBranch(unsigned Size, const MCFixup &Fixup,
90-
uint64_t &Value, MCContext *Ctx = nullptr) {
91-
// Jumps are relative to the current instruction.
92-
Value -= 2;
93-
94-
// We have one extra bit of precision because the value is rightshifted by
95-
// one.
96-
signed_width(Size + 1, Value, std::string("branch target"), Fixup, Ctx);
97-
98-
// Rightshifts the value by one.
99-
AVR::fixups::adjustBranchTarget(Value);
100-
}
101-
10268
/// 22-bit absolute fixup.
10369
///
10470
/// Resolves to:
@@ -116,33 +82,6 @@ static void fixup_call(unsigned Size, const MCFixup &Fixup, uint64_t &Value,
11682
Value = (top << 6) | (middle << 3) | (bottom << 0);
11783
}
11884

119-
/// 7-bit PC-relative fixup.
120-
///
121-
/// Resolves to:
122-
/// 0000 00kk kkkk k000
123-
/// Offset of 0 (so the result is left shifted by 3 bits before application).
124-
static void fixup_7_pcrel(unsigned Size, const MCFixup &Fixup, uint64_t &Value,
125-
MCContext *Ctx = nullptr) {
126-
adjustRelativeBranch(Size, Fixup, Value, Ctx);
127-
128-
// Because the value may be negative, we must mask out the sign bits
129-
Value &= 0x7f;
130-
}
131-
132-
/// 12-bit PC-relative fixup.
133-
/// Yes, the fixup is 12 bits even though the name says otherwise.
134-
///
135-
/// Resolves to:
136-
/// 0000 kkkk kkkk kkkk
137-
/// Offset of 0 (so the result isn't left-shifted before application).
138-
static void fixup_13_pcrel(unsigned Size, const MCFixup &Fixup, uint64_t &Value,
139-
MCContext *Ctx = nullptr) {
140-
adjustRelativeBranch(Size, Fixup, Value, Ctx);
141-
142-
// Because the value may be negative, we must mask out the sign bits
143-
Value &= 0xfff;
144-
}
145-
14685
/// 6-bit fixup for the immediate operand of the STD/LDD family of
14786
/// instructions.
14887
///
@@ -264,10 +203,8 @@ void AVRAsmBackend::adjustFixupValue(const MCFixup &Fixup,
264203
default:
265204
llvm_unreachable("unhandled fixup");
266205
case AVR::fixup_7_pcrel:
267-
adjust::fixup_7_pcrel(Size, Fixup, Value, Ctx);
268-
break;
269206
case AVR::fixup_13_pcrel:
270-
adjust::fixup_13_pcrel(Size, Fixup, Value, Ctx);
207+
// Emitted as relocations, no fixup required.
271208
break;
272209
case AVR::fixup_call:
273210
adjust::fixup_call(Size, Fixup, Value, Ctx);
@@ -518,8 +455,6 @@ bool AVRAsmBackend::shouldForceRelocation(const MCAssembler &Asm,
518455
return Fixup.getKind() >= FirstLiteralRelocationKind;
519456
case AVR::fixup_7_pcrel:
520457
case AVR::fixup_13_pcrel:
521-
// Always resolve relocations for PC-relative branches
522-
return false;
523458
case AVR::fixup_call:
524459
return true;
525460
}

llvm/test/CodeGen/AVR/jmp.ll

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ bb2:
1515

1616
declare i8 @bar(i8);
1717

18-
; CHECK: rcall .-2
18+
; CHECK: rcall .+0
1919
; CHECK-NEXT: 00000000: R_AVR_13_PCREL bar
2020
; CHECK-NEXT: cpi r24, 0x7b
21-
; CHECK-NEXT: brne .+4
21+
; CHECK-NEXT: brne .+0
22+
; CHECK-NEXT: 00000004: R_AVR_7_PCREL .text+0xa
2223
; CHECK-NEXT: ldi r24, 0x64
2324
; CHECK-NEXT: ret
2425
; CHECK-NEXT: ldi r24, 0xc8

llvm/test/MC/AVR/inst-brbc.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ foo:
1717
; CHECK-NEXT: ; fixup A - offset: 0, value: (.Ltmp1-16)+2, kind: fixup_7_pcrel
1818

1919
; INST-LABEL: <foo>:
20-
; INST-NEXT: 23 f4 brvc .+8
21-
; INST-NEXT: c0 f7 brsh .-16
20+
; INST-NEXT: 03 f4 brvc .+0
21+
; INST-NEXT: 00 f4 brsh .+0
2222
; INST-NEXT: 59 f7 brne .-42
2323
; INST-NEXT: 52 f7 brpl .-44
2424
; INST-NEXT: 4c f7 brge .-46

llvm/test/MC/AVR/inst-brbs.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ foo:
1616
; CHECK-NEXT: ; fixup A - offset: 0, value: (.Ltmp1-12)+2, kind: fixup_7_pcrel
1717

1818
; INST-LABEL: <foo>:
19-
; INST-NEXT: 23 f0 brvs .+8
20-
; INST-NEXT: d0 f3 brlo .-12
19+
; INST-NEXT: 03 f0 brvs .+0
20+
; INST-NEXT: 00 f0 brlo .+0
2121
; INST-NEXT: 59 f3 breq .-42
2222
; INST-NEXT: 52 f3 brmi .-44
2323
; INST-NEXT: 4c f3 brlt .-46

llvm/test/MC/AVR/inst-brcc.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bar:
2222
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2323

2424
; INST-LABEL: <foo>:
25-
; INST-NEXT: 08 f5 brsh .+66
26-
; INST-NEXT: a8 f7 brsh .-22
27-
; INST-NEXT: 08 f5 brsh .+66
25+
; INST-NEXT: 00 f4 brsh .+0
26+
; INST-NEXT: 00 f4 brsh .+0
27+
; INST-NEXT: 00 f4 brsh .+0
2828
; INST-NEXT: 00 f4 brsh .+0

llvm/test/MC/AVR/inst-brcs.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bar:
2222
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2323

2424
; INST-LABEL: <foo>:
25-
; INST-NEXT: 20 f0 brlo .+8
26-
; INST-NEXT: 10 f0 brlo .+4
27-
; INST-NEXT: 20 f0 brlo .+8
25+
; INST-NEXT: 00 f0 brlo .+0
26+
; INST-NEXT: 00 f0 brlo .+0
27+
; INST-NEXT: 00 f0 brlo .+0
2828
; INST-NEXT: 00 f0 brlo .+0

llvm/test/MC/AVR/inst-breq.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bar:
2222
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2323

2424
; INST-LABEL: <foo>:
25-
; INST-NEXT: b9 f3 breq .-18
26-
; INST-NEXT: d1 f3 breq .-12
27-
; INST-NEXT: b9 f3 breq .-18
25+
; INST-NEXT: 01 f0 breq .+0
26+
; INST-NEXT: 01 f0 breq .+0
27+
; INST-NEXT: 01 f0 breq .+0
2828
; INST-NEXT: 01 f0 breq .+0

llvm/test/MC/AVR/inst-brge.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: cc f4 brge .+50
23-
; INST-NEXT: ac f4 brge .+42
22+
; INST-NEXT: 04 f4 brge .+0
23+
; INST-NEXT: 04 f4 brge .+0
2424
; INST-NEXT: 04 f4 brge .+0

llvm/test/MC/AVR/inst-brhc.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 35 f4 brhc .+12
23-
; INST-NEXT: 3d f4 brhc .+14
22+
; INST-NEXT: 05 f4 brhc .+0
23+
; INST-NEXT: 05 f4 brhc .+0
2424
; INST-NEXT: 05 f4 brhc .+0

llvm/test/MC/AVR/inst-brhs.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: fd f2 brhs .-66
23-
; INST-NEXT: 3d f0 brhs .+14
22+
; INST-NEXT: 05 f0 brhs .+0
23+
; INST-NEXT: 05 f0 brhs .+0
2424
; INST-NEXT: 05 f0 brhs .+0

llvm/test/MC/AVR/inst-brid.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: af f4 brid .+42
23-
; INST-NEXT: ff f4 brid .+62
22+
; INST-NEXT: 07 f4 brid .+0
23+
; INST-NEXT: 07 f4 brid .+0
2424
; INST-NEXT: 07 f4 brid .+0

llvm/test/MC/AVR/inst-brie.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 57 f0 brie .+20
23-
; INST-NEXT: a7 f0 brie .+40
22+
; INST-NEXT: 07 f0 brie .+0
23+
; INST-NEXT: 07 f0 brie .+0
2424
; INST-NEXT: 07 f0 brie .+0

llvm/test/MC/AVR/inst-brlo.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 30 f0 brlo .+12
23-
; INST-NEXT: 70 f0 brlo .+28
22+
; INST-NEXT: 00 f0 brlo .+0
23+
; INST-NEXT: 00 f0 brlo .+0
2424
; INST-NEXT: 00 f0 brlo .+0

llvm/test/MC/AVR/inst-brlt.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 44 f0 brlt .+16
23-
; INST-NEXT: 0c f0 brlt .+2
22+
; INST-NEXT: 04 f0 brlt .+0
23+
; INST-NEXT: 04 f0 brlt .+0
2424
; INST-NEXT: 04 f0 brlt .+0

llvm/test/MC/AVR/inst-brmi.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 0a f1 brmi .+66
23-
; INST-NEXT: ea f0 brmi .+58
22+
; INST-NEXT: 02 f0 brmi .+0
23+
; INST-NEXT: 02 f0 brmi .+0
2424
; INST-NEXT: 02 f0 brmi .+0

llvm/test/MC/AVR/inst-brne.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ bar:
2222
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2323

2424
; INST-LABEL: <foo>:
25-
; INST-NEXT: 29 f4 brne .+10
26-
; INST-NEXT: 09 f4 brne .+2
27-
; INST-NEXT: 29 f4 brne .+10
25+
; INST-NEXT: 01 f4 brne .+0
26+
; INST-NEXT: 01 f4 brne .+0
27+
; INST-NEXT: 01 f4 brne .+0
2828
; INST-NEXT: 01 f4 brne .+0

llvm/test/MC/AVR/inst-brpl.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: d2 f7 brpl .-12
23-
; INST-NEXT: 4a f4 brpl .+18
22+
; INST-NEXT: 02 f4 brpl .+0
23+
; INST-NEXT: 02 f4 brpl .+0
2424
; INST-NEXT: 02 f4 brpl .+0

llvm/test/MC/AVR/inst-brsh.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 80 f4 brsh .+32
23-
; INST-NEXT: 18 f5 brsh .+70
22+
; INST-NEXT: 00 f4 brsh .+0
23+
; INST-NEXT: 00 f4 brsh .+0
2424
; INST-NEXT: 00 f4 brsh .+0

llvm/test/MC/AVR/inst-brtc.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: d6 f4 brtc .+52
23-
; INST-NEXT: ce f4 brtc .+50
22+
; INST-NEXT: 06 f4 brtc .+0
23+
; INST-NEXT: 06 f4 brtc .+0
2424
; INST-NEXT: 06 f4 brtc .+0

llvm/test/MC/AVR/inst-brts.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 4e f0 brts .+18
23-
; INST-NEXT: 5e f0 brts .+22
22+
; INST-NEXT: 06 f0 brts .+0
23+
; INST-NEXT: 06 f0 brts .+0
2424
; INST-NEXT: 06 f0 brts .+0

llvm/test/MC/AVR/inst-brvc.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 93 f7 brvc .-28
23-
; INST-NEXT: 0b f7 brvc .-62
22+
; INST-NEXT: 03 f4 brvc .+0
23+
; INST-NEXT: 03 f4 brvc .+0
2424
; INST-NEXT: 03 f4 brvc .+0

llvm/test/MC/AVR/inst-brvs.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ bar:
1919
; CHECK-NEXT: ; fixup A - offset: 0, value: bar, kind: fixup_7_pcrel
2020

2121
; INST-LABEL: <foo>:
22-
; INST-NEXT: 4b f0 brvs .+18
23-
; INST-NEXT: 83 f0 brvs .+32
22+
; INST-NEXT: 03 f0 brvs .+0
23+
; INST-NEXT: 03 f0 brvs .+0
2424
; INST-NEXT: 03 f0 brvs .+0

llvm/test/MC/AVR/inst-rcall.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ foo:
2222

2323
; INST-LABEL: <foo>:
2424
; INST-NEXT: 00 d0 rcall .+0
25-
; INST-NEXT: fc df rcall .-8
26-
; INST-NEXT: 06 d0 rcall .+12
27-
; INST-NEXT: 17 d0 rcall .+46
25+
; INST-NEXT: 00 d0 rcall .+0
26+
; INST-NEXT: 00 d0 rcall .+0
27+
; INST-NEXT: 00 d0 rcall .+0
2828
; INST-NEXT: ea df rcall .-44

llvm/test/MC/AVR/inst-rjmp.s

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,18 @@ x:
4343
; CHECK-NEXT: ; fixup A - offset: 0, value: (.Ltmp6+4094)+2, kind: fixup_13_pcrel
4444

4545
; INST-LABEL: <foo>:
46-
; INST-NEXT: 01 c0 rjmp .+2
47-
; INST-NEXT: ff cf rjmp .-2
48-
; INST-NEXT: fd cf rjmp .-6
49-
; INST-NEXT: 04 c0 rjmp .+8
50-
; INST-NEXT: 01 c0 rjmp .+2
46+
; INST-NEXT: 00 c0 rjmp .+0
47+
; INST-NEXT: 00 c0 rjmp .+0
48+
; INST-NEXT: 00 c0 rjmp .+0
49+
; INST-NEXT: 00 c0 rjmp .+0
50+
; INST-NEXT: 00 c0 rjmp .+0
5151
; INST-NEXT: 00 c0 rjmp .+0
5252
; INST-EMPTY:
5353
; INST-LABEL: <end>:
54-
; INST-NEXT: fe cf rjmp .-4
55-
; INST-NEXT: fd cf rjmp .-6
54+
; INST-NEXT: 00 c0 rjmp .+0
55+
; INST-NEXT: 00 c0 rjmp .+0
5656
; INST-EMPTY:
5757
; INST-LABEL: <x>:
58-
; INST-NEXT: ff cf rjmp .-2
58+
; INST-NEXT: 00 c0 rjmp .+0
5959
; INST-NEXT: 0f c0 rjmp .+30
60-
; INST-NEXT: ff c7 rjmp .+4094
60+
; INST-NEXT: 00 c0 rjmp .+0

0 commit comments

Comments
 (0)