OSDN Git Service

[AddDiscriminators] Assign discriminators to MemIntrinsic calls.
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Tue, 11 Apr 2017 19:07:30 +0000 (19:07 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Tue, 11 Apr 2017 19:07:30 +0000 (19:07 +0000)
commit2ef157559bb62d04ee3691781c58648992fb3046
tree4f32cf7b9fe78883d1fb5c7982f32f3ce04cad20
parent94a0ddaec9e5b4653382d9b5d598c2f1efcdb7a5
[AddDiscriminators] Assign discriminators to MemIntrinsic calls.

Before this patch, pass AddDiscriminators always avoided to assign
discriminators to intrinsic calls. This was done mainly for two reasons:
 1) We wanted to minimize the number of based discriminators used.
 2) We wanted to avoid non-deterministic discriminator assignment for
    different debug levels.

Unfortunately, that approach was problematic for MemIntrinsic calls.
MemIntrinsic calls can be split by SROA into loads and stores, and each new
load/store instruction would obtain the debug location from the original
intrinsic call.
If we don't assign a discriminator to MemIntrinsic calls, then we cannot
correctly set the discriminator for the newly created loads and stores.
This may have a negative impact on the basic block weight computation
performed by the SampleLoader.

This patch fixes the issue by letting MemIntrinsic calls have a discriminator.

Differential Revision: https://reviews.llvm.org/D31900

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299972 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Utils/AddDiscriminators.cpp
test/Transforms/AddDiscriminators/memcpy-discriminator.ll [new file with mode: 0644]