diff options
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGen/hexagon-inline-asm.c | 6 |
2 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 01137b66b38..d488ed1dbd7 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -6887,6 +6887,9 @@ public: return true; } break; + case 'a': // Modifier register m0-m1. + Info.setAllowsRegister(); + return true; case 's': // Relocatable constant. return true; diff --git a/clang/test/CodeGen/hexagon-inline-asm.c b/clang/test/CodeGen/hexagon-inline-asm.c index cda3d0dcb6b..8d1308ee5d8 100644 --- a/clang/test/CodeGen/hexagon-inline-asm.c +++ b/clang/test/CodeGen/hexagon-inline-asm.c @@ -15,3 +15,9 @@ void foo(v64 v0, v64 v1, v64 *p) { asm ("%0 = memw(##%1)" : "=r"(r) : "s"(&g)); // CHECK: call i32 asm "$0 = memw(##$1)", "=r,s"(i32* @g) } + +void fred(unsigned *p, unsigned m, unsigned v) { + asm ("memw(%0++%1) = %2" : : "r"(p),"a"(m),"r"(v) : "memory"); +// CHECK: call void asm sideeffect "memw($0++$1) = $2", "r,a,r,~{memory}"(i32* %0, i32 %1, i32 %2) +} + |