mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-10 05:41:40 +00:00
use ArgOperand API (some hunks I could split)
llvm-svn: 106824
This commit is contained in:
parent
7e08d99fd4
commit
d2559bceee
@ -189,8 +189,8 @@ Instruction *InstCombiner::SimplifyMemTransfer(MemIntrinsic *MI) {
|
|||||||
SrcAlign = std::max(SrcAlign, CopyAlign);
|
SrcAlign = std::max(SrcAlign, CopyAlign);
|
||||||
DstAlign = std::max(DstAlign, CopyAlign);
|
DstAlign = std::max(DstAlign, CopyAlign);
|
||||||
|
|
||||||
Value *Src = Builder->CreateBitCast(MI->getOperand(2), NewSrcPtrTy);
|
Value *Src = Builder->CreateBitCast(MI->getArgOperand(1), NewSrcPtrTy);
|
||||||
Value *Dest = Builder->CreateBitCast(MI->getOperand(1), NewDstPtrTy);
|
Value *Dest = Builder->CreateBitCast(MI->getArgOperand(0), NewDstPtrTy);
|
||||||
Instruction *L = new LoadInst(Src, "tmp", MI->isVolatile(), SrcAlign);
|
Instruction *L = new LoadInst(Src, "tmp", MI->isVolatile(), SrcAlign);
|
||||||
InsertNewInstBefore(L, *MI);
|
InsertNewInstBefore(L, *MI);
|
||||||
InsertNewInstBefore(new StoreInst(L, Dest, MI->isVolatile(), DstAlign),
|
InsertNewInstBefore(new StoreInst(L, Dest, MI->isVolatile(), DstAlign),
|
||||||
@ -522,10 +522,10 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// X + undef -> undef
|
// X + undef -> undef
|
||||||
if (isa<UndefValue>(II->getOperand(2)))
|
if (isa<UndefValue>(II->getArgOperand(1)))
|
||||||
return ReplaceInstUsesWith(CI, UndefValue::get(II->getType()));
|
return ReplaceInstUsesWith(CI, UndefValue::get(II->getType()));
|
||||||
|
|
||||||
if (ConstantInt *RHS = dyn_cast<ConstantInt>(II->getOperand(2))) {
|
if (ConstantInt *RHS = dyn_cast<ConstantInt>(II->getArgOperand(1))) {
|
||||||
// X + 0 -> {X, false}
|
// X + 0 -> {X, false}
|
||||||
if (RHS->isZero()) {
|
if (RHS->isZero()) {
|
||||||
Constant *V[] = {
|
Constant *V[] = {
|
||||||
@ -541,19 +541,19 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
|||||||
case Intrinsic::ssub_with_overflow:
|
case Intrinsic::ssub_with_overflow:
|
||||||
// undef - X -> undef
|
// undef - X -> undef
|
||||||
// X - undef -> undef
|
// X - undef -> undef
|
||||||
if (isa<UndefValue>(II->getOperand(1)) ||
|
if (isa<UndefValue>(II->getArgOperand(0)) ||
|
||||||
isa<UndefValue>(II->getOperand(2)))
|
isa<UndefValue>(II->getArgOperand(1)))
|
||||||
return ReplaceInstUsesWith(CI, UndefValue::get(II->getType()));
|
return ReplaceInstUsesWith(CI, UndefValue::get(II->getType()));
|
||||||
|
|
||||||
if (ConstantInt *RHS = dyn_cast<ConstantInt>(II->getOperand(2))) {
|
if (ConstantInt *RHS = dyn_cast<ConstantInt>(II->getArgOperand(1))) {
|
||||||
// X - 0 -> {X, false}
|
// X - 0 -> {X, false}
|
||||||
if (RHS->isZero()) {
|
if (RHS->isZero()) {
|
||||||
Constant *V[] = {
|
Constant *V[] = {
|
||||||
UndefValue::get(II->getOperand(1)->getType()),
|
UndefValue::get(II->getArgOperand(0)->getType()),
|
||||||
ConstantInt::getFalse(II->getContext())
|
ConstantInt::getFalse(II->getContext())
|
||||||
};
|
};
|
||||||
Constant *Struct = ConstantStruct::get(II->getContext(), V, 2, false);
|
Constant *Struct = ConstantStruct::get(II->getContext(), V, 2, false);
|
||||||
return InsertValueInst::Create(Struct, II->getOperand(1), 0);
|
return InsertValueInst::Create(Struct, II->getArgOperand(0), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -569,10 +569,10 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// X * undef -> undef
|
// X * undef -> undef
|
||||||
if (isa<UndefValue>(II->getOperand(2)))
|
if (isa<UndefValue>(II->getArgOperand(1)))
|
||||||
return ReplaceInstUsesWith(CI, UndefValue::get(II->getType()));
|
return ReplaceInstUsesWith(CI, UndefValue::get(II->getType()));
|
||||||
|
|
||||||
if (ConstantInt *RHSI = dyn_cast<ConstantInt>(II->getOperand(2))) {
|
if (ConstantInt *RHSI = dyn_cast<ConstantInt>(II->getArgOperand(1))) {
|
||||||
// X*0 -> {0, false}
|
// X*0 -> {0, false}
|
||||||
if (RHSI->isZero())
|
if (RHSI->isZero())
|
||||||
return ReplaceInstUsesWith(CI, Constant::getNullValue(II->getType()));
|
return ReplaceInstUsesWith(CI, Constant::getNullValue(II->getType()));
|
||||||
@ -627,10 +627,10 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
|||||||
// These intrinsics only demands the 0th element of its input vector. If
|
// These intrinsics only demands the 0th element of its input vector. If
|
||||||
// we can simplify the input based on that, do so now.
|
// we can simplify the input based on that, do so now.
|
||||||
unsigned VWidth =
|
unsigned VWidth =
|
||||||
cast<VectorType>(II->getOperand(1)->getType())->getNumElements();
|
cast<VectorType>(II->getArgOperand(0)->getType())->getNumElements();
|
||||||
APInt DemandedElts(VWidth, 1);
|
APInt DemandedElts(VWidth, 1);
|
||||||
APInt UndefElts(VWidth, 0);
|
APInt UndefElts(VWidth, 0);
|
||||||
if (Value *V = SimplifyDemandedVectorElts(II->getOperand(1), DemandedElts,
|
if (Value *V = SimplifyDemandedVectorElts(II->getArgOperand(0), DemandedElts,
|
||||||
UndefElts)) {
|
UndefElts)) {
|
||||||
II->setOperand(1, V);
|
II->setOperand(1, V);
|
||||||
return II;
|
return II;
|
||||||
|
@ -450,7 +450,7 @@ static bool FindAllMemoryUses(Instruction *I,
|
|||||||
|
|
||||||
if (CallInst *CI = dyn_cast<CallInst>(U)) {
|
if (CallInst *CI = dyn_cast<CallInst>(U)) {
|
||||||
InlineAsm *IA = dyn_cast<InlineAsm>(CI->getCalledValue());
|
InlineAsm *IA = dyn_cast<InlineAsm>(CI->getCalledValue());
|
||||||
if (IA == 0) return true;
|
if (!IA) return true;
|
||||||
|
|
||||||
// If this is a memory operand, we're cool, otherwise bail out.
|
// If this is a memory operand, we're cool, otherwise bail out.
|
||||||
if (!IsOperandAMemoryOperand(CI, IA, I, TLI))
|
if (!IsOperandAMemoryOperand(CI, IA, I, TLI))
|
||||||
|
Loading…
Reference in New Issue
Block a user