Yi Kong <[email protected]> writes: > Author: kongyi > Date: Wed Aug 13 14:18:14 2014 > New Revision: 215568 > > URL: http://llvm.org/viewvc/llvm-project?rev=215568&view=revLog: > ARM: Prefetch intrinsics > > Modified: > cfe/trunk/include/clang/Basic/BuiltinsARM.def > cfe/trunk/lib/CodeGen/CGBuiltin.cpp > cfe/trunk/lib/Sema/SemaChecking.cpp > cfe/trunk/test/CodeGen/builtins-arm.c > cfe/trunk/test/Sema/builtins-arm.c > > Modified: cfe/trunk/include/clang/Basic/BuiltinsARM.def > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsARM.def?rev=215568&r1=215567&r2=215568&view=diff============================================================================== > --- cfe/trunk/include/clang/Basic/BuiltinsARM.def (original) > +++ cfe/trunk/include/clang/Basic/BuiltinsARM.def Wed Aug 13 14:18:14 2014 > @@ -80,6 +80,9 @@ BUILTIN(__builtin_arm_dmb, "vUi", "nc") > BUILTIN(__builtin_arm_dsb, "vUi", "nc") > BUILTIN(__builtin_arm_isb, "vUi", "nc") > > +// Prefetch > +BUILTIN(__builtin_arm_prefetch, "vvC*UiUi", "nc") > + > // MSVC > LANGBUILTIN(__yield, "v", "", ALL_MS_LANGUAGES) > LANGBUILTIN(__wfe, "v", "", ALL_MS_LANGUAGES) > > Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=215568&r1=215567&r2=215568&view=diff============================================================================== > --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Wed Aug 13 14:18:14 2014 > @@ -3088,6 +3088,18 @@ Value *CodeGenFunction::EmitARMBuiltinEx > 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)), > > Modified: cfe/trunk/lib/Sema/SemaChecking.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=215568&r1=215567&r2=215568&view=diff============================================================================== > --- cfe/trunk/lib/Sema/SemaChecking.cpp (original) > +++ cfe/trunk/lib/Sema/SemaChecking.cpp Wed Aug 13 14:18:14 2014 > @@ -624,6 +624,11 @@ bool Sema::CheckARMBuiltinFunctionCall(u > 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; > > > Modified: cfe/trunk/test/CodeGen/builtins-arm.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-arm.c?rev=215568&r1=215567&r2=215568&view=diff============================================================================== > --- cfe/trunk/test/CodeGen/builtins-arm.c (original) > +++ cfe/trunk/test/CodeGen/builtins-arm.c Wed Aug 13 14:18:14 2014 > @@ -66,3 +66,14 @@ void test_barrier() { > unsigned rbit(unsigned a) { > return __builtin_arm_rbit(a); > } > + > +void prefetch(int i) { > + __builtin_arm_prefetch(&i, 0, 1); > +// CHECK: call {{.*}} @llvm.prefetch(i8* %0, i32 0, i32 3, i32 1) > + > + __builtin_arm_prefetch(&i, 1, 1); > +// CHECK: call {{.*}} @llvm.prefetch(i8* %0, i32 1, i32 3, i32 1) > + > + __builtin_arm_prefetch(&i, 1, 0); > +// CHECK: call {{.*}} @llvm.prefetch(i8* %0, i32 1, i32 3, i32 0) > +}
These tests fail in no-asserts builds. Generally, it isn't safe to specify values like %0 in check lines, as they can change in different configurations. I've replaced this with a regex in r215585 so that this doesn't block any bots. > Modified: cfe/trunk/test/Sema/builtins-arm.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/builtins-arm.c?rev=215568&r1=215567&r2=215568&view=diff============================================================================== > --- cfe/trunk/test/Sema/builtins-arm.c (original) > +++ cfe/trunk/test/Sema/builtins-arm.c Wed Aug 13 14:18:14 2014 > @@ -37,4 +37,9 @@ void test3() { > __builtin_arm_isb(18); // expected-error {{argument should be a value from > 0 to 15}} > } > > +void test4() { > + __builtin_arm_prefetch(0, 2, 0); // expected-error {{argument should be a > value from 0 to 1}} > + __builtin_arm_prefetch(0, 0, 2); // expected-error {{argument should be a > value from 0 to 1}} > +} > + > #endif > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
