Skip to content
This repository was archived by the owner on Sep 2, 2018. It is now read-only.

Commit 3c0d2ad

Browse files
author
Dylan McKay
committed
Support upper-case pointer registers in inline assembly
1 parent 4ba1f0a commit 3c0d2ad

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

lib/Target/AVR/AVRISelLowering.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1639,9 +1639,9 @@ AVRTargetLowering::getConstraintType(StringRef Constraint) const {
16391639
case 'w': // Special upper register pairs
16401640
return C_RegisterClass;
16411641
case 't': // Temporary register
1642-
case 'x': // Pointer register pair X
1643-
case 'y': // Pointer register pair Y
1644-
case 'z': // Pointer register pair Z
1642+
case 'x': case 'X': // Pointer register pair X
1643+
case 'y': case 'Y': // Pointer register pair Y
1644+
case 'z': case 'Z': // Pointer register pair Z
16451645
return C_Register;
16461646
case 'Q': // A memory address based on Y or Z pointer with displacement.
16471647
return C_Memory;
@@ -1704,9 +1704,9 @@ AVRTargetLowering::getSingleConstraintMatchWeight(
17041704
case 'q':
17051705
case 't':
17061706
case 'w':
1707-
case 'x':
1708-
case 'y':
1709-
case 'z':
1707+
case 'x': case 'X':
1708+
case 'y': case 'Y':
1709+
case 'z': case 'Z':
17101710
weight = CW_SpecificReg;
17111711
break;
17121712
case 'G':
@@ -1825,10 +1825,13 @@ AVRTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
18251825
case 'w': // Special upper register pairs: r24, r26, r28, r30.
18261826
return std::make_pair(0U, &AVR::IWREGSRegClass);
18271827
case 'x': // Pointer register pair X: r27:r26.
1828+
case 'X':
18281829
return std::make_pair(unsigned(AVR::R27R26), &AVR::PTRREGSRegClass);
18291830
case 'y': // Pointer register pair Y: r29:r28.
1831+
case 'Y':
18301832
return std::make_pair(unsigned(AVR::R29R28), &AVR::PTRREGSRegClass);
18311833
case 'z': // Pointer register pair Z: r31:r30.
1834+
case 'Z':
18321835
return std::make_pair(unsigned(AVR::R31R30), &AVR::PTRREGSRegClass);
18331836
default:
18341837
break;

test/CodeGen/AVR/inline-asm2.ll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
; RUN: llc < %s -march=avr | FileCheck %s
2+
3+
; CHECK-LABEL: foo
4+
define void @foo(i16 %a) {
5+
call void asm sideeffect "add $0, $0", "Z"(i16 %a) nounwind
6+
ret void
7+
}
8+

0 commit comments

Comments
 (0)