Skip to content

Commit ac2988a

Browse files
committed
[AVR] Emit relocation record for local branch
1 parent ee414e3 commit ac2988a

26 files changed

+163
-97
lines changed

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

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -520,19 +520,7 @@ bool AVRAsmBackend::forceRelocation(const MCFragment &F, const MCFixup &Fixup,
520520
return false;
521521

522522
case AVR::fixup_7_pcrel:
523-
case AVR::fixup_13_pcrel: {
524-
uint64_t Offset = Target.getConstant();
525-
uint64_t Size = AVRAsmBackend::getFixupKindInfo(Fixup.getKind()).TargetSize;
526-
527-
// If the jump is too large to encode it, fall back to a relocation.
528-
//
529-
// Note that trying to actually link that relocation *would* fail, but the
530-
// hopes are that the module we're currently compiling won't be actually
531-
// linked to the final binary.
532-
return !adjust::adjustRelativeBranch(Size, Fixup, Offset,
533-
getContext().getSubtargetInfo());
534-
}
535-
523+
case AVR::fixup_13_pcrel:
536524
case AVR::fixup_call:
537525
return true;
538526
}

llvm/test/CodeGen/AVR/branch-relaxation-long-backward.ll

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@
55
; ATTINY85: <main>:
66
; ATTINY85-NEXT: andi r24, 0x1
77
; ATTINY85: cpi r24, 0x0
8-
; ATTINY85-NEXT: breq .+2
9-
; ATTINY85-NEXT: rjmp .+4086
8+
; ATTINY85-NEXT: breq .-2
9+
; ATTINY85-NEXT: R_AVR_7_PCREL .text+0x100c
10+
; ATTINY85-NEXT: rjmp .-2
11+
; ATTINY85-NEXT: R_AVR_13_PCREL .text+0x2
1012
; ATTINY85: ldi r24, 0x3
1113
; ATTINY85-NEXT: ret
1214

1315
; AVR25: <main>:
1416
; AVR25-NEXT: andi r24, 0x1
1517
; AVR25: cpi r24, 0x0
16-
; AVR25-NEXT: breq .+2
18+
; AVR25-NEXT: breq .-2
19+
; AVR25-NEXT: R_AVR_7_PCREL .text+0x100c
1720
; AVR25-NEXT: rjmp .-2
1821
; AVR25-NEXT: R_AVR_13_PCREL .text+0x2
1922
; AVR25: ldi r24, 0x3
@@ -22,7 +25,8 @@
2225
; AVR3: <main>:
2326
; AVR3-NEXT: andi r24, 0x1
2427
; AVR3: cpi r24, 0x0
25-
; AVR3-NEXT: breq .+4
28+
; AVR3-NEXT: breq .-2
29+
; AVR3-NEXT: R_AVR_7_PCREL .text+0x100e
2630
; AVR3-NEXT: jmp 0x0
2731
; AVR3-NEXT: R_AVR_CALL .text+0x2
2832
; AVR3: ldi r24, 0x3

llvm/test/CodeGen/AVR/branch-relaxation-long-forward.ll

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@
55
; ATTINY85: <main>:
66
; ATTINY85-NEXT: andi r24, 0x1
77
; ATTINY85-NEXT: cpi r24, 0x0
8-
; ATTINY85-NEXT: brne .+2
9-
; ATTINY85-NEXT: rjmp .-4092
8+
; ATTINY85-NEXT: brne .-2
9+
; ATTINY85-NEXT: R_AVR_7_PCREL .text+0x8
10+
; ATTINY85-NEXT: rjmp .-2
11+
; ATTINY85-NEXT: R_AVR_13_PCREL .text+0x100c
1012
; ATTINY85: ldi r24, 0x3
1113
; ATTINY85-NEXT: ret
1214

1315
; AVR25: <main>:
1416
; AVR25-NEXT: andi r24, 0x1
1517
; AVR25-NEXT: cpi r24, 0x0
16-
; AVR25-NEXT: brne .+2
18+
; AVR25-NEXT: brne .-2
19+
; AVR25-NEXT: R_AVR_7_PCREL .text+0x8
1720
; AVR25-NEXT: rjmp .-2
1821
; AVR25-NEXT: R_AVR_13_PCREL .text+0x100c
1922
; AVR25: ldi r24, 0x3
@@ -22,7 +25,8 @@
2225
; AVR3: <main>:
2326
; AVR3-NEXT: andi r24, 0x1
2427
; AVR3-NEXT: cpi r24, 0x0
25-
; AVR3-NEXT: brne .+4
28+
; AVR3-NEXT: brne .-2
29+
; AVR3-NEXT: R_AVR_7_PCREL .text+0xa
2630
; AVR3-NEXT: jmp 0x0
2731
; AVR3-NEXT: R_AVR_CALL .text+0x100e
2832
; AVR3: ldi r24, 0x3

llvm/test/CodeGen/AVR/jmp.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ declare i8 @bar(i8);
1818
; CHECK: rcall .-2
1919
; CHECK-NEXT: 00000000: R_AVR_13_PCREL bar
2020
; CHECK-NEXT: cpi r24, 0x7b
21-
; CHECK-NEXT: brne .+4
21+
; CHECK-NEXT: brne .-2
22+
; CHECK-NEXT: 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: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ foo:
1515
; CHECK: brcc .Ltmp1-16+2 ; encoding: [0bAAAAA000,0b111101AA]
1616

1717
; INST-LABEL: <foo>:
18-
; INST-NEXT: 23 f4 brvc .+8
19-
; INST-NEXT: c0 f7 brsh .-16
18+
; INST-NEXT: fb f7 brvc .-2
19+
; INST-NEXT: R_AVR_7_PCREL .text+0xa
20+
; INST-NEXT: f8 f7 brsh .-2
21+
; INST-NEXT: R_AVR_7_PCREL .text-0xc
2022
; INST-NEXT: 59 f7 brne .-42
2123
; INST-NEXT: 52 f7 brpl .-44
2224
; INST-NEXT: 4c f7 brge .-46

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ foo:
1414
; CHECK: brcs .Ltmp1-12+2 ; encoding: [0bAAAAA000,0b111100AA]
1515

1616
; INST-LABEL: <foo>:
17-
; INST-NEXT: 23 f0 brvs .+8
18-
; INST-NEXT: d0 f3 brlo .-12
17+
; INST-NEXT: fb f3 brvs .-2
18+
; INST-NEXT: R_AVR_7_PCREL .text+0xa
19+
; INST-NEXT: f8 f3 brlo .-2
20+
; INST-NEXT: R_AVR_7_PCREL .text-0x8
1921
; INST-NEXT: 59 f3 breq .-42
2022
; INST-NEXT: 52 f3 brmi .-44
2123
; INST-NEXT: 4c f3 brlt .-46

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ bar:
1818
; CHECK: brcc bar ; encoding: [0bAAAAA000,0b111101AA]
1919

2020
; INST-LABEL: <foo>:
21-
; INST-NEXT: 08 f5 brsh .+66
22-
; INST-NEXT: a8 f7 brsh .-22
23-
; INST-NEXT: 08 f5 brsh .+66
24-
; INST-NEXT: 00 f4 brsh .+0
21+
; INST-NEXT: f8 f7 brsh .-2
22+
; INST-NEXT: R_AVR_7_PCREL .text+0x44
23+
; INST-NEXT: f8 f7 brsh .-2
24+
; INST-NEXT: R_AVR_7_PCREL .text-0x12
25+
; INST-NEXT: f8 f7 brsh .-2
26+
; INST-NEXT: R_AVR_7_PCREL .text+0x48
27+
; INST-NEXT: f8 f7 brsh .-2
28+
; INST-NEXT: R_AVR_7_PCREL .text+0x8

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ bar:
1818
; CHECK: brcs bar ; encoding: [0bAAAAA000,0b111100AA]
1919

2020
; INST-LABEL: <foo>:
21-
; INST-NEXT: 20 f0 brlo .+8
22-
; INST-NEXT: 10 f0 brlo .+4
23-
; INST-NEXT: 20 f0 brlo .+8
24-
; INST-NEXT: 00 f0 brlo .+0
21+
; INST-NEXT: f8 f3 brlo .-2
22+
; INST-NEXT: R_AVR_7_PCREL .text+0xa
23+
; INST-NEXT: f8 f3 brlo .-2
24+
; INST-NEXT: R_AVR_7_PCREL .text+0x8
25+
; INST-NEXT: f8 f3 brlo .-2
26+
; INST-NEXT: R_AVR_7_PCREL .text+0xe
27+
; INST-NEXT: f8 f3 brlo .-2

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ bar:
1818
; CHECK: brbs 1, bar ; encoding: [0bAAAAA001,0b111100AA]
1919

2020
; INST-LABEL: <foo>:
21-
; INST-NEXT: b9 f3 breq .-18
22-
; INST-NEXT: d1 f3 breq .-12
23-
; INST-NEXT: b9 f3 breq .-18
24-
; INST-NEXT: 01 f0 breq .+0
21+
; INST-NEXT: f9 f3 breq .-2
22+
; INST-NEXT: R_AVR_7_PCREL .text-0x10
23+
; INST-NEXT: f9 f3 breq .-2
24+
; INST-NEXT: R_AVR_7_PCREL .text-0x8
25+
; INST-NEXT: f9 f3 breq .-2
26+
; INST-NEXT: R_AVR_7_PCREL .text-0xc

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ bar:
1616
; CHECK: brge bar ; encoding: [0bAAAAA100,0b111101AA]
1717

1818
; INST-LABEL: <foo>:
19-
; INST-NEXT: cc f4 brge .+50
20-
; INST-NEXT: ac f4 brge .+42
21-
; INST-NEXT: 04 f4 brge .+0
19+
; INST-NEXT: fc f7 brge .-2
20+
; INST-NEXT: R_AVR_7_PCREL .text+0x34
21+
; INST-NEXT: fc f7 brge .-2
22+
; INST-NEXT: R_AVR_7_PCREL .text+0x2e
23+
; INST-NEXT: fc f7 brge .-2
24+
; INST-NEXT: R_AVR_7_PCREL .text+0x6

0 commit comments

Comments
 (0)