summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-01-11 09:13:56 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-01-11 09:13:56 +0000
commitf1fdf4a80cbca86eadeadc7212701d4231344d01 (patch)
treed7637ed056584050af5d652e9e65846670ba31f4
parent14d4e7bdbf057f6cdcb1dfc8fa704606abf5cf5b (diff)
downloadbcm5719-llvm-f1fdf4a80cbca86eadeadc7212701d4231344d01.tar.gz
bcm5719-llvm-f1fdf4a80cbca86eadeadc7212701d4231344d01.zip
CodeGen: Simplify consecutive '%' modifiers
LLVM the consecutive '%' modifiers are redundant, skip them. llvm-svn: 225602
-rw-r--r--clang/lib/CodeGen/CGStmt.cpp5
-rw-r--r--clang/test/CodeGen/asm.c7
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}"
+}
OpenPOWER on IntegriCloud