summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNirav Dave <niravd@google.com>2019-02-17 03:53:23 +0000
committerNirav Dave <niravd@google.com>2019-02-17 03:53:23 +0000
commit91ecb69acdf4cffb4f879e12716465169848633e (patch)
treefddfeba883247766b5e68489c7fa6fc471d2b79e
parent37f30231ba759c0cc60b8660678d45ac1a86c592 (diff)
downloadbcm5719-llvm-91ecb69acdf4cffb4f879e12716465169848633e.tar.gz
bcm5719-llvm-91ecb69acdf4cffb4f879e12716465169848633e.zip
[X86] Prevent clang clobber checking for asm flag constraints.
Update getConstraintRegister as X86 Asm flag output constraints are no longer fully alphanumeric, llvm-svn: 354211
-rw-r--r--clang/lib/Basic/Targets/X86.h2
-rw-r--r--clang/test/CodeGen/inline-asm-x86-flag-output.c11
2 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
index 2b126268beb..b69a050d237 100644
--- a/clang/lib/Basic/Targets/X86.h
+++ b/clang/lib/Basic/Targets/X86.h
@@ -198,7 +198,7 @@ public:
StringRef Expression) const override {
StringRef::iterator I, E;
for (I = Constraint.begin(), E = Constraint.end(); I != E; ++I) {
- if (isalpha(*I))
+ if (isalpha(*I) || *I == '@')
break;
}
if (I == E)
diff --git a/clang/test/CodeGen/inline-asm-x86-flag-output.c b/clang/test/CodeGen/inline-asm-x86-flag-output.c
index f647e3e3c1e..74ad3a46e70 100644
--- a/clang/test/CodeGen/inline-asm-x86-flag-output.c
+++ b/clang/test/CodeGen/inline-asm-x86-flag-output.c
@@ -363,3 +363,14 @@ int test_ccs(long nr, volatile long *addr) {
return 0;
return 1;
}
+
+_Bool check_no_clobber_conflicts() {
+ //CHECK-LABEL: @check_no_clobber_conflicts
+ //CHECK: = tail call i8 asm "", "={@cce},~{cx},~{dirflag},~{fpsr},~{flags}"()
+ _Bool b;
+ asm(""
+ : "=@cce"(b)
+ :
+ : "cx");
+ return b;
+}
OpenPOWER on IntegriCloud