diff options
| author | Nirav Dave <niravd@google.com> | 2019-02-17 03:53:23 +0000 |
|---|---|---|
| committer | Nirav Dave <niravd@google.com> | 2019-02-17 03:53:23 +0000 |
| commit | 91ecb69acdf4cffb4f879e12716465169848633e (patch) | |
| tree | fddfeba883247766b5e68489c7fa6fc471d2b79e | |
| parent | 37f30231ba759c0cc60b8660678d45ac1a86c592 (diff) | |
| download | bcm5719-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.h | 2 | ||||
| -rw-r--r-- | clang/test/CodeGen/inline-asm-x86-flag-output.c | 11 |
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; +} |

