diff options
| author | Yi Kong <Yi.Kong@arm.com> | 2014-07-17 10:52:06 +0000 |
|---|---|---|
| committer | Yi Kong <Yi.Kong@arm.com> | 2014-07-17 10:52:06 +0000 |
| commit | 19a29ac0d0fbd5fcbc616a2666a7427a5cd336f9 (patch) | |
| tree | 757996dc073737eb19b6f465c65f8e93ceb02e94 /clang/lib/Sema | |
| parent | 6dbcbac98b41df8e08ba4fdea2a835617cf9e8b8 (diff) | |
| download | bcm5719-llvm-19a29ac0d0fbd5fcbc616a2666a7427a5cd336f9.tar.gz bcm5719-llvm-19a29ac0d0fbd5fcbc616a2666a7427a5cd336f9.zip | |
Port memory barriers intrinsics to AArch64
Memory barrier __builtin_arm_[dmb, dsb, isb] intrinsics are required to
implement their corresponding ACLE and MSVC intrinsics.
This patch ports ARM dmb, dsb, isb intrinsic to AArch64.
Requires LLVM r213247.
Differential Revision: http://reviews.llvm.org/D4521
llvm-svn: 213250
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 976f3a696df..7a23797d477 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -645,7 +645,18 @@ bool Sema::CheckAArch64BuiltinFunctionCall(unsigned BuiltinID, if (CheckNeonBuiltinFunctionCall(BuiltinID, TheCall)) return true; - return false; + // For intrinsics which take an immediate value as part of the instruction, + // range check them here. + unsigned i = 0, l = 0, u = 0; + switch (BuiltinID) { + default: return false; + case AArch64::BI__builtin_arm_dmb: + case AArch64::BI__builtin_arm_dsb: + case AArch64::BI__builtin_arm_isb: l = 0; u = 15; break; + } + + // FIXME: VFP Intrinsics should error if VFP not present. + return SemaBuiltinConstantArgRange(TheCall, i, l, u + l); } bool Sema::CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { |

