r264783 - [PGO] Move the instrumentation point closer to the value site.

Artem Belevich via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 29 15:15:28 PDT 2016


Hi,

FYI, cxx-indirect-call.cpp test fails on platforms with different
alignment. It may help to either use specific target or change your
patterns to accommodate other targets.

--Artem

******************** TEST 'Clang :: Profile/cxx-indirect-call.cpp' FAILED
********************
Script:
--
/usr/local/google/home/tra/work/llvm/build/gpu/release/./bin/clang
--driver-mode=g++
 /work/tra/llvm/tools/clang/test/Profile/cxx-indirect-call.cpp -o -
-emit-llvm -S -fprofile-instr-generate -mllvm -enable-value-profiling
-fexceptions -target x86_64-unknown-linux-gnu |
/usr/local/google/home/tra/work/llvm/build/gpu/release/./bin/FileCheck
/work/tra/llvm/tools/clang/test/Profile/cxx-indirect-call.cpp
--
Exit Code: 1

Command Output (stderr):
--
/work/tra/llvm/tools/clang/test/Profile/cxx-indirect-call.cpp:8:11: error:
expected string not found in input
// CHECK: [[REG1:%[0-9]+]] = load void ()*, void ()** @foo, align 4
          ^
<stdin>:1:1: note: scanning from here
; ModuleID = '/work/tra/llvm/tools/clang/test/Profile/cxx-indirect-call.cpp'
^
<stdin>:27:2: note: possible intended match here
 %11 = load void ()*, void ()** @foo, align 8
 ^

--



On Tue, Mar 29, 2016 at 1:44 PM, Betul Buyukkurt via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: betulb
> Date: Tue Mar 29 15:44:09 2016
> New Revision: 264783
>
> URL: http://llvm.org/viewvc/llvm-project?rev=264783&view=rev
> Log:
> [PGO] Move the instrumentation point closer to the value site.
>
> For terminator instructions, the value profiling instrumentation
> happens in a basic block other than where the value site resides.
> This CR moves the instrumentation point prior to the value site.
> Mostly NFC.
>
>
> Added:
>     cfe/trunk/test/Profile/cxx-indirect-call.cpp
> Modified:
>     cfe/trunk/lib/CodeGen/CodeGenPGO.cpp
>     cfe/trunk/test/Profile/c-indirect-call.c
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenPGO.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenPGO.cpp?rev=264783&r1=264782&r2=264783&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenPGO.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenPGO.cpp Tue Mar 29 15:44:09 2016
> @@ -757,10 +757,10 @@ void CodeGenPGO::valueProfile(CGBuilderT
>
>    bool InstrumentValueSites = CGM.getCodeGenOpts().hasProfileClangInstr();
>    if (InstrumentValueSites && RegionCounterMap) {
> -    llvm::LLVMContext &Ctx = CGM.getLLVMContext();
> -    auto *I8PtrTy = llvm::Type::getInt8PtrTy(Ctx);
> +    auto BuilderInsertPoint = Builder.saveIP();
> +    Builder.SetInsertPoint(ValueSite);
>      llvm::Value *Args[5] = {
> -        llvm::ConstantExpr::getBitCast(FuncNameVar, I8PtrTy),
> +        llvm::ConstantExpr::getBitCast(FuncNameVar,
> Builder.getInt8PtrTy()),
>          Builder.getInt64(FunctionHash),
>          Builder.CreatePtrToInt(ValuePtr, Builder.getInt64Ty()),
>          Builder.getInt32(ValueKind),
> @@ -768,6 +768,7 @@ void CodeGenPGO::valueProfile(CGBuilderT
>      };
>      Builder.CreateCall(
>          CGM.getIntrinsic(llvm::Intrinsic::instrprof_value_profile), Args);
> +    Builder.restoreIP(BuilderInsertPoint);
>      return;
>    }
>
>
> Modified: cfe/trunk/test/Profile/c-indirect-call.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Profile/c-indirect-call.c?rev=264783&r1=264782&r2=264783&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Profile/c-indirect-call.c (original)
> +++ cfe/trunk/test/Profile/c-indirect-call.c Tue Mar 29 15:44:09 2016
> @@ -1,13 +1,14 @@
> -// Check the data structures emitted by instrumentation.
> +// Check the value profiling instrinsics emitted by instrumentation.
> +
>  // RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name
> c-indirect-call.c %s -o - -emit-llvm -fprofile-instrument=clang -mllvm
> -enable-value-profiling | FileCheck %s
>
>  void (*foo)(void);
>
>  int main(void) {
>  // CHECK:  [[REG1:%[0-9]+]] = load void ()*, void ()** @foo, align 8
> -// CHECK-NEXT:  call void [[REG1]]()
>  // CHECK-NEXT:  [[REG2:%[0-9]+]] = ptrtoint void ()* [[REG1]] to i64
>  // CHECK-NEXT:  call void @__llvm_profile_instrument_target(i64 [[REG2]],
> i8* bitcast ({{.*}}* @__profd_main to i8*), i32 0)
> +// CHECK-NEXT:  call void [[REG1]]()
>    foo();
>    return 0;
>  }
>
> Added: cfe/trunk/test/Profile/cxx-indirect-call.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Profile/cxx-indirect-call.cpp?rev=264783&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/Profile/cxx-indirect-call.cpp (added)
> +++ cfe/trunk/test/Profile/cxx-indirect-call.cpp Tue Mar 29 15:44:09 2016
> @@ -0,0 +1,21 @@
> +// Check the value profiling instrinsics emitted by instrumentation.
> +
> +// RUN: %clangxx %s -o - -emit-llvm -S -fprofile-instr-generate -mllvm
> -enable-value-profiling -fexceptions -target %itanium_abi_triple |
> FileCheck %s
> +
> +void (*foo) (void);
> +
> +int main(int argc, const char *argv[]) {
> +// CHECK:  [[REG1:%[0-9]+]] = load void ()*, void ()** @foo, align 4
> +// CHECK-NEXT:  [[REG2:%[0-9]+]] = ptrtoint void ()* [[REG1]] to i64
> +// CHECK-NEXT:  call void @__llvm_profile_instrument_target(i64 [[REG2]],
> i8* bitcast ({{.*}}* @__profd_main to i8*), i32 0)
> +// CHECK-NEXT:  invoke void [[REG1]]()
> +  try {
> +    foo();
> +  } catch (int) {}
> +  return 0;
> +}
> +
> +// CHECK: declare void @__llvm_profile_instrument_target(i64, i8*, i32)
> +
> +
> +
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>



-- 
--Artem Belevich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160329/0b3e2305/attachment.html>


More information about the cfe-commits mailing list