r215568 - ARM: Prefetch intrinsics

Justin Bogner mail at justinbogner.com
Wed Aug 13 15:06:02 PDT 2014


Yi Kong <Yi.Kong at arm.com> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list