[TLI] Fix breakage introduced by D21739.
The initialize function has an early return for AMDGPU targets. If taken, the ShouldExtI32* initialization code will not be executed, resulting in invalid values in the corresponding fields. Fix this by moving the code to the top of the function. llvm-svn: 287570
This commit is contained in:
parent
28d5f059ae
commit
6af8e6c3d5
|
@ -61,6 +61,25 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
|
|||
}) &&
|
||||
"TargetLibraryInfoImpl function names must be sorted");
|
||||
|
||||
bool ShouldExtI32Param = false, ShouldExtI32Return = false,
|
||||
ShouldSignExtI32Param = false;
|
||||
// PowerPC64, Sparc64, SystemZ need signext/zeroext on i32 parameters and
|
||||
// returns corresponding to C-level ints and unsigned ints.
|
||||
if (T.getArch() == Triple::ppc64 || T.getArch() == Triple::ppc64le ||
|
||||
T.getArch() == Triple::sparcv9 || T.getArch() == Triple::systemz) {
|
||||
ShouldExtI32Param = true;
|
||||
ShouldExtI32Return = true;
|
||||
}
|
||||
// Mips, on the other hand, needs signext on i32 parameters corresponding
|
||||
// to both signed and unsigned ints.
|
||||
if (T.getArch() == Triple::mips || T.getArch() == Triple::mipsel ||
|
||||
T.getArch() == Triple::mips64 || T.getArch() == Triple::mips64el) {
|
||||
ShouldSignExtI32Param = true;
|
||||
}
|
||||
TLI.setShouldExtI32Param(ShouldExtI32Param);
|
||||
TLI.setShouldExtI32Return(ShouldExtI32Return);
|
||||
TLI.setShouldSignExtI32Param(ShouldSignExtI32Param);
|
||||
|
||||
if (T.getArch() == Triple::r600 ||
|
||||
T.getArch() == Triple::amdgcn) {
|
||||
TLI.setUnavailable(LibFunc::ldexp);
|
||||
|
@ -414,25 +433,6 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
|
|||
}
|
||||
|
||||
TLI.addVectorizableFunctionsFromVecLib(ClVectorLibrary);
|
||||
|
||||
bool ShouldExtI32Param = false, ShouldExtI32Return = false,
|
||||
ShouldSignExtI32Param = false;
|
||||
// PowerPC64, Sparc64, SystemZ need signext/zeroext on i32 parameters and
|
||||
// returns corresponding to C-level ints and unsigned ints.
|
||||
if (T.getArch() == Triple::ppc64 || T.getArch() == Triple::ppc64le ||
|
||||
T.getArch() == Triple::sparcv9 || T.getArch() == Triple::systemz) {
|
||||
ShouldExtI32Param = true;
|
||||
ShouldExtI32Return = true;
|
||||
}
|
||||
// Mips, on the other hand, needs signext on i32 parameters corresponding
|
||||
// to both signed and unsigned ints.
|
||||
if (T.getArch() == Triple::mips || T.getArch() == Triple::mipsel ||
|
||||
T.getArch() == Triple::mips64 || T.getArch() == Triple::mips64el) {
|
||||
ShouldSignExtI32Param = true;
|
||||
}
|
||||
TLI.setShouldExtI32Param(ShouldExtI32Param);
|
||||
TLI.setShouldExtI32Return(ShouldExtI32Return);
|
||||
TLI.setShouldSignExtI32Param(ShouldSignExtI32Param);
|
||||
}
|
||||
|
||||
TargetLibraryInfoImpl::TargetLibraryInfoImpl() {
|
||||
|
|
Loading…
Reference in New Issue