[llvm] r338204 - [X86] Correct the immediate cost for 'add/sub i64 %x, 0x80000000'.
Dean Michael Berris via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 30 02:13:39 PDT 2018
Hi Craig,
This breaks in ubsan builds:
-- Testing: 26927 tests, 64 threads --
Testing: 0 .. 10.. 20.. 30.. 40.. 50
FAIL: LLVM :: CodeGen/X86/lsr-overflow.ll (14236 of 26927)
******************** TEST 'LLVM :: CodeGen/X86/lsr-overflow.ll' FAILED
********************
Script:
--
: 'RUN: at line 1';
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm_build_ubsan/bin/llc
< /b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/test/CodeGen/X86/lsr-overflow.ll
-mtriple=x86_64-linux |
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm_build_ubsan/bin/FileCheck
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/test/CodeGen/X86/lsr-overflow.ll
: 'RUN: at line 2';
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm_build_ubsan/bin/llc
< /b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/test/CodeGen/X86/lsr-overflow.ll
-mtriple=x86_64-win32 |
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm_build_ubsan/bin/FileCheck
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/test/CodeGen/X86/lsr-overflow.ll
--
Exit Code: 2
Command Output (stderr):
--
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/Target/X86/X86TargetTransformInfo.cpp:2340:58:
runtime error: negation of -9223372036854775808 cannot be represented
in type 'int64_t' (aka 'long'); cast to an unsigned type to negate
this value to itself
#0 0x154e929 in llvm::X86TTIImpl::getIntImmCost(unsigned int,
unsigned int, llvm::APInt const&, llvm::Type*)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/Target/X86/X86TargetTransformInfo.cpp:2340:58
#1 0x19ec8e3 in llvm::TargetTransformInfo::getIntImmCost(unsigned
int, unsigned int, llvm::APInt const&, llvm::Type*) const
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/Analysis/TargetTransformInfo.cpp:319:23
#2 0x226028f in
llvm::ConstantHoistingPass::collectConstantCandidates(llvm::DenseMap<llvm::ConstantInt*,
unsigned int, llvm::DenseMapInfo<llvm::ConstantInt*>,
llvm::detail::DenseMapPair<llvm::ConstantInt*, unsigned int> >&,
llvm::Instruction*, unsigned int, llvm::ConstantInt*)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp:354:17
#3 0x2260ca9 in
llvm::ConstantHoistingPass::collectConstantCandidates(llvm::DenseMap<llvm::ConstantInt*,
unsigned int, llvm::DenseMapInfo<llvm::ConstantInt*>,
llvm::detail::DenseMapPair<llvm::ConstantInt*, unsigned int> >&,
llvm::Instruction*)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp:433:7
#4 0x2260e09 in
llvm::ConstantHoistingPass::collectConstantCandidates(llvm::Function&)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp:444:7
#5 0x22643c5 in
llvm::ConstantHoistingPass::runImpl(llvm::Function&,
llvm::TargetTransformInfo&, llvm::DominatorTree&,
llvm::BlockFrequencyInfo*, llvm::BasicBlock&)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp:786:3
#6 0x2264bf7 in (anonymous
namespace)::ConstantHoistingLegacyPass::runOnFunction(llvm::Function&)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/Transforms/Scalar/ConstantHoisting.cpp:139:12
#7 0x20f3972 in
llvm::FPPassManager::runOnFunction(llvm::Function&)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/IR/LegacyPassManager.cpp:1586:27
#8 0x20f3d36 in llvm::FPPassManager::runOnModule(llvm::Module&)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/IR/LegacyPassManager.cpp:1609:16
#9 0x20f4435 in runOnModule
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/IR/LegacyPassManager.cpp:1669:27
#10 0x20f4435 in llvm::legacy::PassManagerImpl::run(llvm::Module&)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/lib/IR/LegacyPassManager.cpp:1774
#11 0x796eeb in compileModule(char**, llvm::LLVMContext&)
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/tools/llc/llc.cpp:597:8
#12 0x79449b in main
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/tools/llc/llc.cpp:351:22
#13 0x7fef709be2e0 in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
#14 0x775c49 in _start
(/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm_build_ubsan/bin/llc+0x775c49)
FileCheck error: '-' is empty.
FileCheck command line:
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm_build_ubsan/bin/FileCheck
/b/sanitizer-x86_64-linux-bootstrap-ubsan/build/llvm/test/CodeGen/X86/lsr-overflow.ll
--
********************
Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..
Testing Time: 56.81s
********************
Failing Tests (1):
LLVM :: CodeGen/X86/lsr-overflow.ll
Expected Passes : 26101
Expected Failures : 149
Unsupported Tests : 676
Unexpected Failures: 1
FAILED: test/CMakeFiles/check-llvm
This is caught by
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap-ubsan/builds/5233/steps/check-llvm%20ubsan/logs/stdio
-- can we revert this in the meantime?
Cheers
On Sun, Jul 29, 2018 at 4:22 AM Craig Topper via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: ctopper
> Date: Sat Jul 28 11:21:46 2018
> New Revision: 338204
>
> URL: http://llvm.org/viewvc/llvm-project?rev=338204&view=rev
> Log:
> [X86] Correct the immediate cost for 'add/sub i64 %x, 0x80000000'.
>
> X86 normally requires immediates to be a signed 32-bit value which would exclude i64 0x80000000. But for add/sub we can negate the constant and use the opposite instruction.
>
> Modified:
> llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp?rev=338204&r1=338203&r2=338204&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp Sat Jul 28 11:21:46 2018
> @@ -2332,9 +2332,15 @@ int X86TTIImpl::getIntImmCost(unsigned O
> // immediates here as the normal path expects bit 31 to be sign extended.
> if (Idx == 1 && Imm.getBitWidth() == 64 && isUInt<32>(Imm.getZExtValue()))
> return TTI::TCC_Free;
> - LLVM_FALLTHROUGH;
> + ImmIdx = 1;
> + break;
> case Instruction::Add:
> case Instruction::Sub:
> + // For add/sub, we can use the opposite instruction for INT32_MIN.
> + if (Idx == 1 && Imm.getBitWidth() == 64 && isInt<32>(-Imm.getSExtValue()))
> + return TTI::TCC_Free;
> + ImmIdx = 1;
> + break;
> case Instruction::Mul:
> case Instruction::UDiv:
> case Instruction::SDiv:
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list