diff options
| author | Yi Kong <Yi.Kong@arm.com> | 2014-08-13 19:18:14 +0000 |
|---|---|---|
| committer | Yi Kong <Yi.Kong@arm.com> | 2014-08-13 19:18:14 +0000 |
| commit | 26d104a9ec2470ed0b35171e36ad4522f88837e1 (patch) | |
| tree | 813e73842515f6300d6070c32f1ae964ebe638e8 /clang/lib | |
| parent | bb415eac2e79cc9c6d761cdb427693d8936b4a62 (diff) | |
| download | bcm5719-llvm-26d104a9ec2470ed0b35171e36ad4522f88837e1.tar.gz bcm5719-llvm-26d104a9ec2470ed0b35171e36ad4522f88837e1.zip | |
ARM: Prefetch intrinsics
llvm-svn: 215568
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 12 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 5 |
2 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 79f6925ba7a..092c44f5c28 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -3088,6 +3088,18 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID, return Builder.CreateCall(F, llvm::ConstantInt::get(Int32Ty, HintID)); } + if (BuiltinID == ARM::BI__builtin_arm_prefetch) { + Value *Address = EmitScalarExpr(E->getArg(0)); + Value *RW = EmitScalarExpr(E->getArg(1)); + Value *IsData = EmitScalarExpr(E->getArg(2)); + + // Locality is not supported on ARM target + Value *Locality = llvm::ConstantInt::get(Int32Ty, 3); + + Value *F = CGM.getIntrinsic(Intrinsic::prefetch); + return Builder.CreateCall4(F, Address, RW, Locality, IsData); + } + if (BuiltinID == ARM::BI__builtin_arm_rbit) { return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_rbit), EmitScalarExpr(E->getArg(0)), diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 7bc3ba7febc..abda2d26649 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -624,6 +624,11 @@ bool Sema::CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 64); } + if (BuiltinID == ARM::BI__builtin_arm_prefetch) { + return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || + SemaBuiltinConstantArgRange(TheCall, 2, 0, 1); + } + if (CheckNeonBuiltinFunctionCall(BuiltinID, TheCall)) return true; |

