From: Eric Christopher Date: Fri, 12 Jun 2015 01:35:58 +0000 (+0000) Subject: Handle -mno- in target attribute strings by replacing the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9f630a6d673c3296aeb56e31f27eb622df334c3e;p=clang Handle -mno- in target attribute strings by replacing the -mno- with a - to match how we handle this in the rest of the frontend. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@239581 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 424997d125..9be7340626 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -1515,8 +1515,10 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI, else if (Feature.startswith("tune=")) // We don't support cpu tuning this way currently. ; - else - Features.push_back("+" + Feature.str()); + else if (Feature.startswith("mno-")) + Features.push_back("-" + Feature.split("-").second.str()); + else + Features.push_back("+" + Feature.str()); } } } diff --git a/test/CodeGen/attr-target.c b/test/CodeGen/attr-target.c index 2e548cc701..e21f047ed0 100644 --- a/test/CodeGen/attr-target.c +++ b/test/CodeGen/attr-target.c @@ -6,6 +6,8 @@ int __attribute__((target("avx,sse4.2,arch=ivybridge"))) foo(int a) { return 4; int __attribute__((target("tune=sandybridge"))) walrus(int a) { return 4; } +int __attribute__((target("mno-sse2"))) echidna(int a) { return 4; } + int bar(int a) { return baz(a) + foo(a); } // Check that we emit the additional subtarget and cpu features for foo and not for baz or bar. @@ -13,6 +15,8 @@ int bar(int a) { return baz(a) + foo(a); } // CHECK: foo{{.*}} #1 // We ignore the tune attribute so walrus should be identical to baz and bar. // CHECK: walrus{{.*}} #0 +// CHECK: echidna{{.*}} #2 // CHECK: bar{{.*}} #0 // CHECK: #0 = {{.*}}"target-cpu"="x86-64" "target-features"="+sse,+sse2" // CHECK: #1 = {{.*}}"target-cpu"="ivybridge" "target-features"="+sse,+sse2,+avx,+sse4.2" +// CHECK: #2 = {{.*}}"target-cpu"="x86-64" "target-features"="+sse,+sse2,-sse2"