diff options
-rw-r--r-- | clang/lib/CodeGen/CGStmt.cpp | 5 | ||||
-rw-r--r-- | clang/test/CodeGen/asm.c | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index d910f2fb969..bd48227b15c 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -1660,8 +1660,9 @@ SimplifyConstraint(const char *Constraint, const TargetInfo &Target, Constraint++; break; case '&': - Result += '&'; - while (Constraint[1] && Constraint[1] == '&') + case '%': + Result += *Constraint; + while (Constraint[1] && Constraint[1] == *Constraint) Constraint++; break; case ',': diff --git a/clang/test/CodeGen/asm.c b/clang/test/CodeGen/asm.c index c64f83f7877..038d346e999 100644 --- a/clang/test/CodeGen/asm.c +++ b/clang/test/CodeGen/asm.c @@ -255,3 +255,10 @@ void t30(int len) { // CHECK: @t30 // CHECK: call void asm sideeffect "", "=*&rm,0,~{dirflag},~{fpsr},~{flags}" } + +void t31(int len) { + __asm__ volatile("" + : "+%%rm"(len), "+rm"(len)); + // CHECK: @t31 + // CHECK: call void asm sideeffect "", "=*%rm,=*rm,0,1,~{dirflag},~{fpsr},~{flags}" +} |