Index: src/IceTargetLoweringX8632.cpp |
diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp |
index ebfc4d2da1ea6eaa5e0d5f728ad959b13808bc90..465f39889462749b0838d5a8ead98c6cc52d4107 100644 |
--- a/src/IceTargetLoweringX8632.cpp |
+++ b/src/IceTargetLoweringX8632.cpp |
@@ -2857,16 +2857,12 @@ void TargetX8632::lowerInsertElement(const InstInsertElement *Inst) { |
} |
void TargetX8632::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
- switch (Instr->getIntrinsicInfo().ID) { |
+ switch (Intrinsics::IntrinsicID ID = Instr->getIntrinsicInfo().ID) { |
case Intrinsics::AtomicCmpxchg: { |
- if (!Intrinsics::VerifyMemoryOrder( |
- llvm::cast<ConstantInteger32>(Instr->getArg(3))->getValue())) { |
- Func->setError("Unexpected memory ordering (success) for AtomicCmpxchg"); |
- return; |
- } |
- if (!Intrinsics::VerifyMemoryOrder( |
+ if (!Intrinsics::isMemoryOrderValid( |
+ ID, llvm::cast<ConstantInteger32>(Instr->getArg(3))->getValue(), |
llvm::cast<ConstantInteger32>(Instr->getArg(4))->getValue())) { |
- Func->setError("Unexpected memory ordering (failure) for AtomicCmpxchg"); |
+ Func->setError("Unexpected memory ordering for AtomicCmpxchg"); |
return; |
} |
Variable *DestPrev = Instr->getDest(); |
@@ -2879,8 +2875,8 @@ void TargetX8632::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
return; |
} |
case Intrinsics::AtomicFence: |
- if (!Intrinsics::VerifyMemoryOrder( |
- llvm::cast<ConstantInteger32>(Instr->getArg(0))->getValue())) { |
+ if (!Intrinsics::isMemoryOrderValid( |
+ ID, llvm::cast<ConstantInteger32>(Instr->getArg(0))->getValue())) { |
Func->setError("Unexpected memory ordering for AtomicFence"); |
return; |
} |
@@ -2925,8 +2921,8 @@ void TargetX8632::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
case Intrinsics::AtomicLoad: { |
// We require the memory address to be naturally aligned. |
// Given that is the case, then normal loads are atomic. |
- if (!Intrinsics::VerifyMemoryOrder( |
- llvm::cast<ConstantInteger32>(Instr->getArg(1))->getValue())) { |
+ if (!Intrinsics::isMemoryOrderValid( |
+ ID, llvm::cast<ConstantInteger32>(Instr->getArg(1))->getValue())) { |
Func->setError("Unexpected memory ordering for AtomicLoad"); |
return; |
} |
@@ -2958,8 +2954,8 @@ void TargetX8632::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
return; |
} |
case Intrinsics::AtomicRMW: |
- if (!Intrinsics::VerifyMemoryOrder( |
- llvm::cast<ConstantInteger32>(Instr->getArg(3))->getValue())) { |
+ if (!Intrinsics::isMemoryOrderValid( |
+ ID, llvm::cast<ConstantInteger32>(Instr->getArg(3))->getValue())) { |
Func->setError("Unexpected memory ordering for AtomicRMW"); |
return; |
} |
@@ -2969,8 +2965,8 @@ void TargetX8632::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
Instr->getArg(1), Instr->getArg(2)); |
return; |
case Intrinsics::AtomicStore: { |
- if (!Intrinsics::VerifyMemoryOrder( |
- llvm::cast<ConstantInteger32>(Instr->getArg(2))->getValue())) { |
+ if (!Intrinsics::isMemoryOrderValid( |
+ ID, llvm::cast<ConstantInteger32>(Instr->getArg(2))->getValue())) { |
Func->setError("Unexpected memory ordering for AtomicStore"); |
return; |
} |
@@ -4485,6 +4481,8 @@ OperandX8632Mem *TargetX8632::FormMemoryOperand(Operand *Operand, Type Ty) { |
Constant *Offset = llvm::dyn_cast<Constant>(Operand); |
assert(Base || Offset); |
if (Offset) { |
+ // Make sure Offset is not undef. |
+ Offset = llvm::cast<Constant>(legalize(Offset)); |
assert(llvm::isa<ConstantInteger32>(Offset) || |
llvm::isa<ConstantRelocatable>(Offset)); |
} |