Cause the mips16/nomips16 attribute to be passed to LLVM from Clang

in the LLVM assembly language output.

llvm-svn: 176971
This commit is contained in:
Reed Kotler 2013-03-13 20:40:30 +00:00
parent 74fc23fa5d
commit 3d5966f31b
2 changed files with 27 additions and 4 deletions

View File

@ -4321,11 +4321,17 @@ public:
void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
CodeGen::CodeGenModule &CGM) const {
//
// can fill this in when new attribute work in llvm is done.
// attributes mips16 and nomips16 need to be handled here.
//
const FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
if (!FD) return;
llvm::Function *Fn = cast<llvm::Function>(GV);
if (FD->hasAttr<Mips16Attr>()) {
Fn->addFnAttr("mips16");
}
else if (FD->hasAttr<NoMips16Attr>()) {
Fn->addFnAttr("nomips16");
}
}
bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
llvm::Value *Address) const;

View File

@ -0,0 +1,17 @@
// RUN: %clang_cc1 -triple mipsel-linux-gnu -emit-llvm -o - %s | FileCheck %s
void __attribute__((mips16)) foo (void) {
}
// CHECK: define void @foo() [[MIPS16:#[0-9]+]]
void __attribute__((nomips16)) nofoo (void) {
}
// CHECK: define void @nofoo() [[NOMIPS16:#[0-9]+]]
// CHECK: attributes [[MIPS16]] = { nounwind "fp-contract-model"="standard" "mips16" {{.*}} }
// CHECK: attributes [[NOMIPS16]] = { nounwind "fp-contract-model"="standard" "nomips16" {{.*}} }