mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 06:25:18 +00:00
Fix bug in PR454 resolution. Added new test case.
This fixes llvmAsmParser.cpp miscompile by llvm on PowerPC Darwin. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31053 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -4785,7 +4785,21 @@ Instruction *InstCombiner::visitSetCondInstWithCastAndCast(SetCondInst &SCI) {
|
||||
Constant *Res = ConstantExpr::getCast(CI, SrcTy);
|
||||
|
||||
if (ConstantExpr::getCast(Res, DestTy) == CI) {
|
||||
RHSCIOp = Res;
|
||||
// Make sure that src sign and dest sign match. For example,
|
||||
//
|
||||
// %A = cast short %X to uint
|
||||
// %B = setgt uint %A, 1330
|
||||
//
|
||||
// It is incorrect to transformt this into
|
||||
//
|
||||
// %B = setgt short %X, 1330
|
||||
//
|
||||
// because %A may have negative value.
|
||||
// However, it is OK if SrcTy is bool. See cast-set.ll testcase.
|
||||
if (isSignSrc == isSignDest || SrcTy == Type::BoolTy)
|
||||
RHSCIOp = Res;
|
||||
else
|
||||
return 0;
|
||||
} else {
|
||||
// If the value cannot be represented in the shorter type, we cannot emit
|
||||
// a simple comparison.
|
||||
|
Reference in New Issue
Block a user