Commit 99bbb14b by Nicolas Capens Committed by Nicolas Capens

Eliminate the InstIntrinsicCall Target parameter

It is no longer used now that profiling support at the Subzero level is eliminated. This change adjusts all of the uses of getSrc() on intrinsics to obtain the correct operand, but does not yet make simplifications based on having them align with load/store instructions. Bug: b/179497998 Change-Id: I93705eaa1b7626184f612ab3a9755048004e531f Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/52529 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Kokoro-Result: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAntonio Maiorano <amaiorano@google.com>
parent d4f27d7a
...@@ -635,7 +635,7 @@ Ice::Operand *Optimizer::storeAddress(const Ice::Inst *instruction) ...@@ -635,7 +635,7 @@ Ice::Operand *Optimizer::storeAddress(const Ice::Inst *instruction)
if(auto *storeSubVector = asStoreSubVector(instruction)) if(auto *storeSubVector = asStoreSubVector(instruction))
{ {
return storeSubVector->getSrc(2); return storeSubVector->getSrc(1);
} }
return nullptr; return nullptr;
...@@ -652,7 +652,7 @@ Ice::Operand *Optimizer::loadAddress(const Ice::Inst *instruction) ...@@ -652,7 +652,7 @@ Ice::Operand *Optimizer::loadAddress(const Ice::Inst *instruction)
if(auto *loadSubVector = asLoadSubVector(instruction)) if(auto *loadSubVector = asLoadSubVector(instruction))
{ {
return loadSubVector->getSrc(1); return loadSubVector->getSrc(0);
} }
return nullptr; return nullptr;
...@@ -669,7 +669,7 @@ Ice::Operand *Optimizer::storeData(const Ice::Inst *instruction) ...@@ -669,7 +669,7 @@ Ice::Operand *Optimizer::storeData(const Ice::Inst *instruction)
if(auto *storeSubVector = asStoreSubVector(instruction)) if(auto *storeSubVector = asStoreSubVector(instruction))
{ {
return storeSubVector->getSrc(1); return storeSubVector->getSrc(0);
} }
return nullptr; return nullptr;
...@@ -715,9 +715,9 @@ bool Optimizer::loadTypeMatchesStore(const Ice::Inst *load, const Ice::Inst *sto ...@@ -715,9 +715,9 @@ bool Optimizer::loadTypeMatchesStore(const Ice::Inst *load, const Ice::Inst *sto
if(auto *loadSubVector = asLoadSubVector(load)) if(auto *loadSubVector = asLoadSubVector(load))
{ {
// Check for matching type and sub-vector width. // Check for matching type and sub-vector width.
return storeSubVector->getSrc(1)->getType() == loadSubVector->getDest()->getType() && return storeSubVector->getSrc(0)->getType() == loadSubVector->getDest()->getType() &&
llvm::cast<Ice::ConstantInteger32>(storeSubVector->getSrc(3))->getValue() == llvm::cast<Ice::ConstantInteger32>(storeSubVector->getSrc(2))->getValue() ==
llvm::cast<Ice::ConstantInteger32>(loadSubVector->getSrc(2))->getValue(); llvm::cast<Ice::ConstantInteger32>(loadSubVector->getSrc(1))->getValue();
} }
} }
......
...@@ -1444,9 +1444,8 @@ Value *Nucleus::createLoad(Value *ptr, Type *type, bool isVolatile, unsigned int ...@@ -1444,9 +1444,8 @@ Value *Nucleus::createLoad(Value *ptr, Type *type, bool isVolatile, unsigned int
else else
{ {
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::LoadSubVector, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::LoadSubVector, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32);
result = ::function->makeVariable(T(type)); result = ::function->makeVariable(T(type));
auto load = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic); auto load = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
load->addArg(ptr); load->addArg(ptr);
load->addArg(::context->getConstantInt32(typeSize(type))); load->addArg(::context->getConstantInt32(typeSize(type)));
::basicBlock->appendInst(load); ::basicBlock->appendInst(load);
...@@ -1516,8 +1515,7 @@ Value *Nucleus::createStore(Value *value, Value *ptr, Type *type, bool isVolatil ...@@ -1516,8 +1515,7 @@ Value *Nucleus::createStore(Value *value, Value *ptr, Type *type, bool isVolatil
else else
{ {
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::StoreSubVector, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::StoreSubVector, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto store = Ice::InstIntrinsicCall::create(::function, 3, nullptr, intrinsic);
auto store = Ice::InstIntrinsicCall::create(::function, 3, nullptr, target, intrinsic);
store->addArg(value); store->addArg(value);
store->addArg(ptr); store->addArg(ptr);
store->addArg(::context->getConstantInt32(typeSize(type))); store->addArg(::context->getConstantInt32(typeSize(type)));
...@@ -1577,8 +1575,7 @@ static Value *createAtomicRMW(Ice::Intrinsics::AtomicRMWOperation rmwOp, Value * ...@@ -1577,8 +1575,7 @@ static Value *createAtomicRMW(Ice::Intrinsics::AtomicRMWOperation rmwOp, Value *
Ice::Variable *result = ::function->makeVariable(value->getType()); Ice::Variable *result = ::function->makeVariable(value->getType());
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AtomicRMW, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AtomicRMW, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto inst = Ice::InstIntrinsicCall::create(::function, 0, result, intrinsic);
auto inst = Ice::InstIntrinsicCall::create(::function, 0, result, target, intrinsic);
auto op = ::context->getConstantInt32(rmwOp); auto op = ::context->getConstantInt32(rmwOp);
auto order = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrder)); auto order = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrder));
inst->addArg(op); inst->addArg(op);
...@@ -1632,8 +1629,7 @@ Value *Nucleus::createAtomicCompareExchange(Value *ptr, Value *value, Value *com ...@@ -1632,8 +1629,7 @@ Value *Nucleus::createAtomicCompareExchange(Value *ptr, Value *value, Value *com
Ice::Variable *result = ::function->makeVariable(value->getType()); Ice::Variable *result = ::function->makeVariable(value->getType());
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AtomicCmpxchg, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AtomicCmpxchg, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto inst = Ice::InstIntrinsicCall::create(::function, 0, result, intrinsic);
auto inst = Ice::InstIntrinsicCall::create(::function, 0, result, target, intrinsic);
auto orderEq = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrderEqual)); auto orderEq = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrderEqual));
auto orderNeq = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrderUnequal)); auto orderNeq = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrderUnequal));
inst->addArg(ptr); inst->addArg(ptr);
...@@ -2291,8 +2287,7 @@ RValue<Byte8> AddSat(RValue<Byte8> x, RValue<Byte8> y) ...@@ -2291,8 +2287,7 @@ RValue<Byte8> AddSat(RValue<Byte8> x, RValue<Byte8> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AddSaturateUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AddSaturateUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto paddusb = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto paddusb = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
paddusb->addArg(x.value()); paddusb->addArg(x.value());
paddusb->addArg(y.value()); paddusb->addArg(y.value());
::basicBlock->appendInst(paddusb); ::basicBlock->appendInst(paddusb);
...@@ -2322,8 +2317,7 @@ RValue<Byte8> SubSat(RValue<Byte8> x, RValue<Byte8> y) ...@@ -2322,8 +2317,7 @@ RValue<Byte8> SubSat(RValue<Byte8> x, RValue<Byte8> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SubtractSaturateUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SubtractSaturateUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto psubusw = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto psubusw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
psubusw->addArg(x.value()); psubusw->addArg(x.value());
psubusw->addArg(y.value()); psubusw->addArg(y.value());
::basicBlock->appendInst(psubusw); ::basicBlock->appendInst(psubusw);
...@@ -2387,8 +2381,7 @@ RValue<Int> SignMask(RValue<Byte8> x) ...@@ -2387,8 +2381,7 @@ RValue<Int> SignMask(RValue<Byte8> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SignMask, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SignMask, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
movmsk->addArg(x.value()); movmsk->addArg(x.value());
::basicBlock->appendInst(movmsk); ::basicBlock->appendInst(movmsk);
...@@ -2449,8 +2442,7 @@ RValue<SByte8> AddSat(RValue<SByte8> x, RValue<SByte8> y) ...@@ -2449,8 +2442,7 @@ RValue<SByte8> AddSat(RValue<SByte8> x, RValue<SByte8> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AddSaturateSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AddSaturateSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto paddsb = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto paddsb = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
paddsb->addArg(x.value()); paddsb->addArg(x.value());
paddsb->addArg(y.value()); paddsb->addArg(y.value());
::basicBlock->appendInst(paddsb); ::basicBlock->appendInst(paddsb);
...@@ -2480,8 +2472,7 @@ RValue<SByte8> SubSat(RValue<SByte8> x, RValue<SByte8> y) ...@@ -2480,8 +2472,7 @@ RValue<SByte8> SubSat(RValue<SByte8> x, RValue<SByte8> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SubtractSaturateSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SubtractSaturateSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto psubsb = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto psubsb = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
psubsb->addArg(x.value()); psubsb->addArg(x.value());
psubsb->addArg(y.value()); psubsb->addArg(y.value());
::basicBlock->appendInst(psubsb); ::basicBlock->appendInst(psubsb);
...@@ -2502,8 +2493,7 @@ RValue<Int> SignMask(RValue<SByte8> x) ...@@ -2502,8 +2493,7 @@ RValue<Int> SignMask(RValue<SByte8> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SignMask, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SignMask, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
movmsk->addArg(x.value()); movmsk->addArg(x.value());
::basicBlock->appendInst(movmsk); ::basicBlock->appendInst(movmsk);
...@@ -2661,8 +2651,7 @@ RValue<Short4> AddSat(RValue<Short4> x, RValue<Short4> y) ...@@ -2661,8 +2651,7 @@ RValue<Short4> AddSat(RValue<Short4> x, RValue<Short4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AddSaturateSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AddSaturateSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto paddsw = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto paddsw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
paddsw->addArg(x.value()); paddsw->addArg(x.value());
paddsw->addArg(y.value()); paddsw->addArg(y.value());
::basicBlock->appendInst(paddsw); ::basicBlock->appendInst(paddsw);
...@@ -2688,8 +2677,7 @@ RValue<Short4> SubSat(RValue<Short4> x, RValue<Short4> y) ...@@ -2688,8 +2677,7 @@ RValue<Short4> SubSat(RValue<Short4> x, RValue<Short4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SubtractSaturateSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SubtractSaturateSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto psubsw = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto psubsw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
psubsw->addArg(x.value()); psubsw->addArg(x.value());
psubsw->addArg(y.value()); psubsw->addArg(y.value());
::basicBlock->appendInst(psubsw); ::basicBlock->appendInst(psubsw);
...@@ -2715,8 +2703,7 @@ RValue<Short4> MulHigh(RValue<Short4> x, RValue<Short4> y) ...@@ -2715,8 +2703,7 @@ RValue<Short4> MulHigh(RValue<Short4> x, RValue<Short4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::MultiplyHighSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::MultiplyHighSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto pmulhw = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto pmulhw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
pmulhw->addArg(x.value()); pmulhw->addArg(x.value());
pmulhw->addArg(y.value()); pmulhw->addArg(y.value());
::basicBlock->appendInst(pmulhw); ::basicBlock->appendInst(pmulhw);
...@@ -2740,8 +2727,7 @@ RValue<Int2> MulAdd(RValue<Short4> x, RValue<Short4> y) ...@@ -2740,8 +2727,7 @@ RValue<Int2> MulAdd(RValue<Short4> x, RValue<Short4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::MultiplyAddPairs, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::MultiplyAddPairs, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto pmaddwd = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto pmaddwd = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
pmaddwd->addArg(x.value()); pmaddwd->addArg(x.value());
pmaddwd->addArg(y.value()); pmaddwd->addArg(y.value());
::basicBlock->appendInst(pmaddwd); ::basicBlock->appendInst(pmaddwd);
...@@ -2771,8 +2757,7 @@ RValue<SByte8> PackSigned(RValue<Short4> x, RValue<Short4> y) ...@@ -2771,8 +2757,7 @@ RValue<SByte8> PackSigned(RValue<Short4> x, RValue<Short4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::VectorPackSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::VectorPackSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
pack->addArg(x.value()); pack->addArg(x.value());
pack->addArg(y.value()); pack->addArg(y.value());
::basicBlock->appendInst(pack); ::basicBlock->appendInst(pack);
...@@ -2802,8 +2787,7 @@ RValue<Byte8> PackUnsigned(RValue<Short4> x, RValue<Short4> y) ...@@ -2802,8 +2787,7 @@ RValue<Byte8> PackUnsigned(RValue<Short4> x, RValue<Short4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v16i8);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::VectorPackUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::VectorPackUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
pack->addArg(x.value()); pack->addArg(x.value());
pack->addArg(y.value()); pack->addArg(y.value());
::basicBlock->appendInst(pack); ::basicBlock->appendInst(pack);
...@@ -2956,8 +2940,7 @@ RValue<UShort4> AddSat(RValue<UShort4> x, RValue<UShort4> y) ...@@ -2956,8 +2940,7 @@ RValue<UShort4> AddSat(RValue<UShort4> x, RValue<UShort4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AddSaturateUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AddSaturateUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto paddusw = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto paddusw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
paddusw->addArg(x.value()); paddusw->addArg(x.value());
paddusw->addArg(y.value()); paddusw->addArg(y.value());
::basicBlock->appendInst(paddusw); ::basicBlock->appendInst(paddusw);
...@@ -2983,8 +2966,7 @@ RValue<UShort4> SubSat(RValue<UShort4> x, RValue<UShort4> y) ...@@ -2983,8 +2966,7 @@ RValue<UShort4> SubSat(RValue<UShort4> x, RValue<UShort4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SubtractSaturateUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SubtractSaturateUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto psubusw = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto psubusw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
psubusw->addArg(x.value()); psubusw->addArg(x.value());
psubusw->addArg(y.value()); psubusw->addArg(y.value());
::basicBlock->appendInst(psubusw); ::basicBlock->appendInst(psubusw);
...@@ -3010,8 +2992,7 @@ RValue<UShort4> MulHigh(RValue<UShort4> x, RValue<UShort4> y) ...@@ -3010,8 +2992,7 @@ RValue<UShort4> MulHigh(RValue<UShort4> x, RValue<UShort4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::MultiplyHighUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::MultiplyHighUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto pmulhuw = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto pmulhuw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
pmulhuw->addArg(x.value()); pmulhuw->addArg(x.value());
pmulhuw->addArg(y.value()); pmulhuw->addArg(y.value());
::basicBlock->appendInst(pmulhuw); ::basicBlock->appendInst(pmulhuw);
...@@ -3269,8 +3250,7 @@ RValue<Int> RoundInt(RValue<Float> cast) ...@@ -3269,8 +3250,7 @@ RValue<Int> RoundInt(RValue<Float> cast)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Nearbyint, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Nearbyint, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
nearbyint->addArg(cast.value()); nearbyint->addArg(cast.value());
::basicBlock->appendInst(nearbyint); ::basicBlock->appendInst(nearbyint);
...@@ -3622,8 +3602,7 @@ RValue<Int4> RoundInt(RValue<Float4> cast) ...@@ -3622,8 +3602,7 @@ RValue<Int4> RoundInt(RValue<Float4> cast)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Nearbyint, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Nearbyint, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
nearbyint->addArg(cast.value()); nearbyint->addArg(cast.value());
::basicBlock->appendInst(nearbyint); ::basicBlock->appendInst(nearbyint);
...@@ -3649,8 +3628,7 @@ RValue<Int4> RoundIntClamped(RValue<Float4> cast) ...@@ -3649,8 +3628,7 @@ RValue<Int4> RoundIntClamped(RValue<Float4> cast)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Nearbyint, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Nearbyint, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
nearbyint->addArg(clamped.value()); nearbyint->addArg(clamped.value());
::basicBlock->appendInst(nearbyint); ::basicBlock->appendInst(nearbyint);
...@@ -3679,8 +3657,7 @@ RValue<Short8> PackSigned(RValue<Int4> x, RValue<Int4> y) ...@@ -3679,8 +3657,7 @@ RValue<Short8> PackSigned(RValue<Int4> x, RValue<Int4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::VectorPackSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::VectorPackSigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
pack->addArg(x.value()); pack->addArg(x.value());
pack->addArg(y.value()); pack->addArg(y.value());
::basicBlock->appendInst(pack); ::basicBlock->appendInst(pack);
...@@ -3706,8 +3683,7 @@ RValue<UShort8> PackUnsigned(RValue<Int4> x, RValue<Int4> y) ...@@ -3706,8 +3683,7 @@ RValue<UShort8> PackUnsigned(RValue<Int4> x, RValue<Int4> y)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v8i16);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::VectorPackUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::VectorPackUnsigned, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
pack->addArg(x.value()); pack->addArg(x.value());
pack->addArg(y.value()); pack->addArg(y.value());
::basicBlock->appendInst(pack); ::basicBlock->appendInst(pack);
...@@ -3728,8 +3704,7 @@ RValue<Int> SignMask(RValue<Int4> x) ...@@ -3728,8 +3704,7 @@ RValue<Int> SignMask(RValue<Int4> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SignMask, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SignMask, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
movmsk->addArg(x.value()); movmsk->addArg(x.value());
::basicBlock->appendInst(movmsk); ::basicBlock->appendInst(movmsk);
...@@ -3901,8 +3876,7 @@ RValue<Float> Sqrt(RValue<Float> x) ...@@ -3901,8 +3876,7 @@ RValue<Float> Sqrt(RValue<Float> x)
RR_DEBUG_INFO_UPDATE_LOC(); RR_DEBUG_INFO_UPDATE_LOC();
Ice::Variable *result = ::function->makeVariable(Ice::IceType_f32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_f32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Sqrt, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Sqrt, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto sqrt = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto sqrt = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
sqrt->addArg(x.value()); sqrt->addArg(x.value());
::basicBlock->appendInst(sqrt); ::basicBlock->appendInst(sqrt);
...@@ -4057,8 +4031,7 @@ RValue<Float4> Sqrt(RValue<Float4> x) ...@@ -4057,8 +4031,7 @@ RValue<Float4> Sqrt(RValue<Float4> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Sqrt, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Sqrt, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto sqrt = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto sqrt = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
sqrt->addArg(x.value()); sqrt->addArg(x.value());
::basicBlock->appendInst(sqrt); ::basicBlock->appendInst(sqrt);
...@@ -4078,8 +4051,7 @@ RValue<Int> SignMask(RValue<Float4> x) ...@@ -4078,8 +4051,7 @@ RValue<Int> SignMask(RValue<Float4> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SignMask, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::SignMask, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
movmsk->addArg(x.value()); movmsk->addArg(x.value());
::basicBlock->appendInst(movmsk); ::basicBlock->appendInst(movmsk);
...@@ -4171,8 +4143,7 @@ RValue<Float4> Round(RValue<Float4> x) ...@@ -4171,8 +4143,7 @@ RValue<Float4> Round(RValue<Float4> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Round, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Round, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto round = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto round = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
round->addArg(x.value()); round->addArg(x.value());
round->addArg(::context->getConstantInt32(0)); round->addArg(::context->getConstantInt32(0));
::basicBlock->appendInst(round); ::basicBlock->appendInst(round);
...@@ -4192,8 +4163,7 @@ RValue<Float4> Trunc(RValue<Float4> x) ...@@ -4192,8 +4163,7 @@ RValue<Float4> Trunc(RValue<Float4> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Round, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Round, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto round = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto round = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
round->addArg(x.value()); round->addArg(x.value());
round->addArg(::context->getConstantInt32(3)); round->addArg(::context->getConstantInt32(3));
::basicBlock->appendInst(round); ::basicBlock->appendInst(round);
...@@ -4234,8 +4204,7 @@ RValue<Float4> Floor(RValue<Float4> x) ...@@ -4234,8 +4204,7 @@ RValue<Float4> Floor(RValue<Float4> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Round, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Round, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto round = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto round = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
round->addArg(x.value()); round->addArg(x.value());
round->addArg(::context->getConstantInt32(1)); round->addArg(::context->getConstantInt32(1));
::basicBlock->appendInst(round); ::basicBlock->appendInst(round);
...@@ -4255,8 +4224,7 @@ RValue<Float4> Ceil(RValue<Float4> x) ...@@ -4255,8 +4224,7 @@ RValue<Float4> Ceil(RValue<Float4> x)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_v4f32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Round, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Round, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto round = Ice::InstIntrinsicCall::create(::function, 2, result, intrinsic);
auto round = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
round->addArg(x.value()); round->addArg(x.value());
round->addArg(::context->getConstantInt32(2)); round->addArg(::context->getConstantInt32(2));
::basicBlock->appendInst(round); ::basicBlock->appendInst(round);
...@@ -4303,8 +4271,7 @@ void Breakpoint() ...@@ -4303,8 +4271,7 @@ void Breakpoint()
{ {
RR_DEBUG_INFO_UPDATE_LOC(); RR_DEBUG_INFO_UPDATE_LOC();
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Trap, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Trap, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto trap = Ice::InstIntrinsicCall::create(::function, 0, nullptr, intrinsic);
auto trap = Ice::InstIntrinsicCall::create(::function, 0, nullptr, target, intrinsic);
::basicBlock->appendInst(trap); ::basicBlock->appendInst(trap);
} }
...@@ -4312,8 +4279,7 @@ void Nucleus::createFence(std::memory_order memoryOrder) ...@@ -4312,8 +4279,7 @@ void Nucleus::createFence(std::memory_order memoryOrder)
{ {
RR_DEBUG_INFO_UPDATE_LOC(); RR_DEBUG_INFO_UPDATE_LOC();
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AtomicFence, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::AtomicFence, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto inst = Ice::InstIntrinsicCall::create(::function, 0, nullptr, intrinsic);
auto inst = Ice::InstIntrinsicCall::create(::function, 0, nullptr, target, intrinsic);
auto order = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrder)); auto order = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrder));
inst->addArg(order); inst->addArg(order);
::basicBlock->appendInst(inst); ::basicBlock->appendInst(inst);
...@@ -4493,8 +4459,7 @@ RValue<UInt> Ctlz(RValue<UInt> x, bool isZeroUndef) ...@@ -4493,8 +4459,7 @@ RValue<UInt> Ctlz(RValue<UInt> x, bool isZeroUndef)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Ctlz, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Ctlz, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto ctlz = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto ctlz = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
ctlz->addArg(x.value()); ctlz->addArg(x.value());
::basicBlock->appendInst(ctlz); ::basicBlock->appendInst(ctlz);
...@@ -4534,8 +4499,7 @@ RValue<UInt> Cttz(RValue<UInt> x, bool isZeroUndef) ...@@ -4534,8 +4499,7 @@ RValue<UInt> Cttz(RValue<UInt> x, bool isZeroUndef)
{ {
Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32); Ice::Variable *result = ::function->makeVariable(Ice::IceType_i32);
const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Cttz, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F }; const Ice::Intrinsics::IntrinsicInfo intrinsic = { Ice::Intrinsics::Cttz, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F };
auto target = ::context->getConstantUndef(Ice::IceType_i32); auto ctlz = Ice::InstIntrinsicCall::create(::function, 1, result, intrinsic);
auto ctlz = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
ctlz->addArg(x.value()); ctlz->addArg(x.value());
::basicBlock->appendInst(ctlz); ::basicBlock->appendInst(ctlz);
......
...@@ -610,20 +610,21 @@ private: ...@@ -610,20 +610,21 @@ private:
Operand *Source2, Operand *Source3); Operand *Source2, Operand *Source3);
}; };
/// Call to an intrinsic function. The call target is captured as getSrc(0), and /// Call to an intrinsic function.
/// arg I is captured as getSrc(I+1). class InstIntrinsicCall : public InstHighLevel {
class InstIntrinsicCall : public InstCall {
InstIntrinsicCall() = delete; InstIntrinsicCall() = delete;
InstIntrinsicCall(const InstIntrinsicCall &) = delete; InstIntrinsicCall(const InstIntrinsicCall &) = delete;
InstIntrinsicCall &operator=(const InstIntrinsicCall &) = delete; InstIntrinsicCall &operator=(const InstIntrinsicCall &) = delete;
public: public:
static InstIntrinsicCall *create(Cfg *Func, SizeT NumArgs, Variable *Dest, static InstIntrinsicCall *create(Cfg *Func, SizeT NumArgs, Variable *Dest,
Operand *CallTarget,
const Intrinsics::IntrinsicInfo &Info) { const Intrinsics::IntrinsicInfo &Info) {
return new (Func->allocate<InstIntrinsicCall>()) return new (Func->allocate<InstIntrinsicCall>())
InstIntrinsicCall(Func, NumArgs, Dest, CallTarget, Info); InstIntrinsicCall(Func, NumArgs, Dest, Info);
} }
void addArg(Operand *Arg) { addSource(Arg); }
Operand *getArg(SizeT I) const { return getSrc(I); }
SizeT getNumArgs() const { return getSrcSize(); }
static bool classof(const Inst *Instr) { static bool classof(const Inst *Instr) {
return Instr->getKind() == IntrinsicCall; return Instr->getKind() == IntrinsicCall;
} }
...@@ -635,10 +636,8 @@ public: ...@@ -635,10 +636,8 @@ public:
private: private:
InstIntrinsicCall(Cfg *Func, SizeT NumArgs, Variable *Dest, InstIntrinsicCall(Cfg *Func, SizeT NumArgs, Variable *Dest,
Operand *CallTarget, const Intrinsics::IntrinsicInfo &Info) const Intrinsics::IntrinsicInfo &Info)
: InstCall(Func, NumArgs, Dest, CallTarget, false, false, false, : InstHighLevel(Func, Inst::IntrinsicCall, NumArgs, Dest), Info(Info) {}
Info.HasSideEffects, Inst::IntrinsicCall),
Info(Info) {}
const Intrinsics::IntrinsicInfo Info; const Intrinsics::IntrinsicInfo Info;
}; };
......
...@@ -6126,8 +6126,7 @@ void TargetX86Base<TraitsType>::doAddressOptLoadSubVector() { ...@@ -6126,8 +6126,7 @@ void TargetX86Base<TraitsType>::doAddressOptLoadSubVector() {
const Ice::Intrinsics::IntrinsicInfo Info = { const Ice::Intrinsics::IntrinsicInfo Info = {
Ice::Intrinsics::LoadSubVector, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::LoadSubVector, Ice::Intrinsics::SideEffects_F,
Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F}; Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F};
auto Target = Ctx->getConstantUndef(Ice::IceType_i32); auto *NewLoad = Context.insert<InstIntrinsicCall>(2, Dest, Info);
auto *NewLoad = Context.insert<InstIntrinsicCall>(2, Dest, Target, Info);
NewLoad->addArg(OptAddr); NewLoad->addArg(OptAddr);
NewLoad->addArg(Intrinsic->getArg(1)); NewLoad->addArg(Intrinsic->getArg(1));
} }
...@@ -7002,9 +7001,7 @@ void TargetX86Base<TraitsType>::doAddressOptStoreSubVector() { ...@@ -7002,9 +7001,7 @@ void TargetX86Base<TraitsType>::doAddressOptStoreSubVector() {
const Ice::Intrinsics::IntrinsicInfo Info = { const Ice::Intrinsics::IntrinsicInfo Info = {
Ice::Intrinsics::StoreSubVector, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::StoreSubVector, Ice::Intrinsics::SideEffects_T,
Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T}; Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T};
auto Target = Ctx->getConstantUndef(Ice::IceType_i32); auto *NewStore = Context.insert<InstIntrinsicCall>(3, nullptr, Info);
auto *NewStore =
Context.insert<InstIntrinsicCall>(3, nullptr, Target, Info);
NewStore->addArg(Data); NewStore->addArg(Data);
NewStore->addArg(OptAddr); NewStore->addArg(OptAddr);
NewStore->addArg(Intrinsic->getArg(2)); NewStore->addArg(Intrinsic->getArg(2));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment