diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-05-04 02:52:25 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-05-04 02:52:25 +0000 |
commit | 956c2ec532ab716f05cf51e8a5634088a8d728f4 (patch) | |
tree | 010505e5f1a1cb9e4077057f90a5fb552a852fe7 /clang/lib | |
parent | 6323a2d63c704aa26e6e10b48cbc6d55325a496a (diff) | |
download | bcm5719-llvm-956c2ec532ab716f05cf51e8a5634088a8d728f4.tar.gz bcm5719-llvm-956c2ec532ab716f05cf51e8a5634088a8d728f4.zip |
CodeGen: complete ARM ACLE hint 8.4 support
Add support for the remaining hints from the ACLE. Although __dbg is listed as
a hint, it is handled different, so it is not covered by this change.
llvm-svn: 207930
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 3800685cfef..824de8ccbb9 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -4327,14 +4327,29 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID, Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID, const CallExpr *E) { - if (BuiltinID == ARM::BI__yield) { - Function *F = CGM.getIntrinsic(Intrinsic::arm_hint); - return Builder.CreateCall(F, llvm::ConstantInt::get(Int32Ty, 1)); + unsigned HintID = static_cast<unsigned>(-1); + switch (BuiltinID) { + default: break; + case ARM::BI__yield: + HintID = 1; + break; + case ARM::BI__wfe: + HintID = 2; + break; + case ARM::BI__wfi: + HintID = 3; + break; + case ARM::BI__sev: + HintID = 4; + break; + case ARM::BI__sevl: + HintID = 5; + break; } - if (BuiltinID == ARM::BI__sevl) { + if (HintID != static_cast<unsigned>(-1)) { Function *F = CGM.getIntrinsic(Intrinsic::arm_hint); - return Builder.CreateCall(F, llvm::ConstantInt::get(Int32Ty, 5)); + return Builder.CreateCall(F, llvm::ConstantInt::get(Int32Ty, HintID)); } if (BuiltinID == ARM::BI__clear_cache) { |