aboutsummaryrefslogtreecommitdiff
path: root/src/Reactor/SubzeroReactor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Reactor/SubzeroReactor.cpp')
-rw-r--r--src/Reactor/SubzeroReactor.cpp159
1 files changed, 58 insertions, 101 deletions
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index f17574b16..c536639dd 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -101,7 +101,7 @@ Ice::Variable *allocateStackVariable(Ice::Cfg *function, Ice::Type type, int arr
auto bytes = Ice::ConstantInteger32::create(function->getContext(), Ice::IceType_i32, totalSize);
auto address = function->makeVariable(getPointerType(type));
- auto alloca = Ice::InstAlloca::create(function, address, bytes, typeSize);
+ auto alloca = Ice::InstAlloca::create(function, address, bytes, typeSize); // SRoA depends on the alignment to match the type size.
function->getEntryNode()->getInsts().push_front(alloca);
return address;
@@ -174,15 +174,6 @@ Ice::Variable *Call(Ice::Cfg *function, Ice::CfgNode *basicBlock, Return(fptr)(C
return Call(function, basicBlock, retTy, reinterpret_cast<void const *>(fptr), iceArgs, false);
}
-// Returns a non-const variable copy of const v
-Ice::Variable *createUnconstCast(Ice::Cfg *function, Ice::CfgNode *basicBlock, Ice::Constant *v)
-{
- Ice::Variable *result = function->makeVariable(v->getType());
- Ice::InstCast *cast = Ice::InstCast::create(function, Ice::InstCast::Bitcast, result, v);
- basicBlock->appendInst(cast);
- return result;
-}
-
Ice::Variable *createTruncate(Ice::Cfg *function, Ice::CfgNode *basicBlock, Ice::Operand *from, Ice::Type toType)
{
Ice::Variable *to = function->makeVariable(toType);
@@ -193,14 +184,6 @@ Ice::Variable *createTruncate(Ice::Cfg *function, Ice::CfgNode *basicBlock, Ice:
Ice::Variable *createLoad(Ice::Cfg *function, Ice::CfgNode *basicBlock, Ice::Operand *ptr, Ice::Type type, unsigned int align)
{
- // TODO(b/148272103): InstLoad assumes that a constant ptr is an offset, rather than an
- // absolute address. We circumvent this by casting to a non-const variable, and loading
- // from that.
- if(auto *cptr = llvm::dyn_cast<Ice::Constant>(ptr))
- {
- ptr = sz::createUnconstCast(function, basicBlock, cptr);
- }
-
Ice::Variable *result = function->makeVariable(type);
auto load = Ice::InstLoad::create(function, result, ptr, align);
basicBlock->appendInst(load);
@@ -258,6 +241,9 @@ marl::Scheduler &getOrCreateScheduler()
return *scheduler;
}
+
+rr::Nucleus::OptimizerCallback *optimizerCallback = nullptr;
+
} // Anonymous namespace
namespace {
@@ -1025,7 +1011,17 @@ static std::shared_ptr<Routine> acquireRoutine(Ice::Cfg *const (&functions)[Coun
currFunc->setFunctionName(Ice::GlobalString::createWithString(::context, names[i]));
- rr::optimize(currFunc);
+ if(::optimizerCallback)
+ {
+ Nucleus::OptimizerReport report;
+ rr::optimize(currFunc, &report);
+ ::optimizerCallback(&report);
+ ::optimizerCallback = nullptr;
+ }
+ else
+ {
+ rr::optimize(currFunc);
+ }
currFunc->computeInOutEdges();
ASSERT_MSG(!currFunc->hasError(), "%s", currFunc->getError().c_str());
@@ -1108,7 +1104,7 @@ Value *Nucleus::allocateStackVariable(Type *t, int arraySize)
auto bytes = Ice::ConstantInteger32::create(::context, Ice::IceType_i32, totalSize);
auto address = ::function->makeVariable(T(getPointerType(t)));
- auto alloca = Ice::InstAlloca::create(::function, address, bytes, typeSize);
+ auto alloca = Ice::InstAlloca::create(::function, address, bytes, typeSize); // SRoA depends on the alignment to match the type size.
::function->getEntryNode()->getInsts().push_front(alloca);
return V(address);
@@ -1126,9 +1122,7 @@ BasicBlock *Nucleus::getInsertBlock()
void Nucleus::setInsertBlock(BasicBlock *basicBlock)
{
- // ASSERT(::basicBlock->getInsts().back().getTerminatorEdges().size() >= 0 && "Previous basic block must have a terminator");
-
- Variable::materializeAll();
+ // ASSERT(::basicBlock->getInsts().back().getTerminatorEdges().size() >= 0 && "Previous basic block must have a terminator");
::basicBlock = basicBlock;
}
@@ -1444,9 +1438,8 @@ Value *Nucleus::createLoad(Value *ptr, Type *type, bool isVolatile, unsigned int
else
{
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));
- auto load = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto load = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
load->addArg(ptr);
load->addArg(::context->getConstantInt32(typeSize(type)));
::basicBlock->appendInst(load);
@@ -1516,8 +1509,7 @@ Value *Nucleus::createStore(Value *value, Value *ptr, Type *type, bool isVolatil
else
{
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, target, intrinsic);
+ auto store = Ice::InstIntrinsic::create(::function, 3, nullptr, intrinsic);
store->addArg(value);
store->addArg(ptr);
store->addArg(::context->getConstantInt32(typeSize(type)));
@@ -1577,8 +1569,7 @@ static Value *createAtomicRMW(Ice::Intrinsics::AtomicRMWOperation rmwOp, Value *
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto inst = Ice::InstIntrinsicCall::create(::function, 0, result, target, intrinsic);
+ auto inst = Ice::InstIntrinsic::create(::function, 0, result, intrinsic);
auto op = ::context->getConstantInt32(rmwOp);
auto order = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrder));
inst->addArg(op);
@@ -1632,8 +1623,7 @@ Value *Nucleus::createAtomicCompareExchange(Value *ptr, Value *value, Value *com
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto inst = Ice::InstIntrinsicCall::create(::function, 0, result, target, intrinsic);
+ auto inst = Ice::InstIntrinsic::create(::function, 0, result, intrinsic);
auto orderEq = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrderEqual));
auto orderNeq = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrderUnequal));
inst->addArg(ptr);
@@ -1744,12 +1734,6 @@ static Value *createIntCompare(Ice::InstIcmp::ICond condition, Value *lhs, Value
return V(result);
}
-Value *Nucleus::createPtrEQ(Value *lhs, Value *rhs)
-{
- RR_DEBUG_INFO_UPDATE_LOC();
- return createIntCompare(Ice::InstIcmp::Eq, lhs, rhs);
-}
-
Value *Nucleus::createICmpEQ(Value *lhs, Value *rhs)
{
RR_DEBUG_INFO_UPDATE_LOC();
@@ -2213,6 +2197,11 @@ Value *Nucleus::createConstantString(const char *v)
return V(IceConstantData(v, strlen(v) + 1));
}
+void Nucleus::setOptimizerCallback(OptimizerCallback *callback)
+{
+ ::optimizerCallback = callback;
+}
+
Type *Void::type()
{
return T(Ice::IceType_void);
@@ -2291,8 +2280,7 @@ RValue<Byte8> AddSat(RValue<Byte8> x, RValue<Byte8> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto paddusb = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto paddusb = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
paddusb->addArg(x.value());
paddusb->addArg(y.value());
::basicBlock->appendInst(paddusb);
@@ -2322,8 +2310,7 @@ RValue<Byte8> SubSat(RValue<Byte8> x, RValue<Byte8> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto psubusw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto psubusw = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
psubusw->addArg(x.value());
psubusw->addArg(y.value());
::basicBlock->appendInst(psubusw);
@@ -2387,8 +2374,7 @@ RValue<Int> SignMask(RValue<Byte8> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto movmsk = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
movmsk->addArg(x.value());
::basicBlock->appendInst(movmsk);
@@ -2449,8 +2435,7 @@ RValue<SByte8> AddSat(RValue<SByte8> x, RValue<SByte8> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto paddsb = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto paddsb = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
paddsb->addArg(x.value());
paddsb->addArg(y.value());
::basicBlock->appendInst(paddsb);
@@ -2480,8 +2465,7 @@ RValue<SByte8> SubSat(RValue<SByte8> x, RValue<SByte8> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto psubsb = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto psubsb = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
psubsb->addArg(x.value());
psubsb->addArg(y.value());
::basicBlock->appendInst(psubsb);
@@ -2502,8 +2486,7 @@ RValue<Int> SignMask(RValue<SByte8> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto movmsk = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
movmsk->addArg(x.value());
::basicBlock->appendInst(movmsk);
@@ -2661,8 +2644,7 @@ RValue<Short4> AddSat(RValue<Short4> x, RValue<Short4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto paddsw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto paddsw = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
paddsw->addArg(x.value());
paddsw->addArg(y.value());
::basicBlock->appendInst(paddsw);
@@ -2688,8 +2670,7 @@ RValue<Short4> SubSat(RValue<Short4> x, RValue<Short4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto psubsw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto psubsw = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
psubsw->addArg(x.value());
psubsw->addArg(y.value());
::basicBlock->appendInst(psubsw);
@@ -2715,8 +2696,7 @@ RValue<Short4> MulHigh(RValue<Short4> x, RValue<Short4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto pmulhw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto pmulhw = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
pmulhw->addArg(x.value());
pmulhw->addArg(y.value());
::basicBlock->appendInst(pmulhw);
@@ -2740,8 +2720,7 @@ RValue<Int2> MulAdd(RValue<Short4> x, RValue<Short4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto pmaddwd = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto pmaddwd = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
pmaddwd->addArg(x.value());
pmaddwd->addArg(y.value());
::basicBlock->appendInst(pmaddwd);
@@ -2771,8 +2750,7 @@ RValue<SByte8> PackSigned(RValue<Short4> x, RValue<Short4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto pack = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
pack->addArg(x.value());
pack->addArg(y.value());
::basicBlock->appendInst(pack);
@@ -2802,8 +2780,7 @@ RValue<Byte8> PackUnsigned(RValue<Short4> x, RValue<Short4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto pack = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
pack->addArg(x.value());
pack->addArg(y.value());
::basicBlock->appendInst(pack);
@@ -2956,8 +2933,7 @@ RValue<UShort4> AddSat(RValue<UShort4> x, RValue<UShort4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto paddusw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto paddusw = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
paddusw->addArg(x.value());
paddusw->addArg(y.value());
::basicBlock->appendInst(paddusw);
@@ -2983,8 +2959,7 @@ RValue<UShort4> SubSat(RValue<UShort4> x, RValue<UShort4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto psubusw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto psubusw = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
psubusw->addArg(x.value());
psubusw->addArg(y.value());
::basicBlock->appendInst(psubusw);
@@ -3010,8 +2985,7 @@ RValue<UShort4> MulHigh(RValue<UShort4> x, RValue<UShort4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto pmulhuw = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto pmulhuw = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
pmulhuw->addArg(x.value());
pmulhuw->addArg(y.value());
::basicBlock->appendInst(pmulhuw);
@@ -3269,8 +3243,7 @@ RValue<Int> RoundInt(RValue<Float> cast)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto nearbyint = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
nearbyint->addArg(cast.value());
::basicBlock->appendInst(nearbyint);
@@ -3622,8 +3595,7 @@ RValue<Int4> RoundInt(RValue<Float4> cast)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto nearbyint = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
nearbyint->addArg(cast.value());
::basicBlock->appendInst(nearbyint);
@@ -3649,8 +3621,7 @@ RValue<Int4> RoundIntClamped(RValue<Float4> cast)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto nearbyint = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto nearbyint = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
nearbyint->addArg(clamped.value());
::basicBlock->appendInst(nearbyint);
@@ -3679,8 +3650,7 @@ RValue<Short8> PackSigned(RValue<Int4> x, RValue<Int4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto pack = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
pack->addArg(x.value());
pack->addArg(y.value());
::basicBlock->appendInst(pack);
@@ -3706,8 +3676,7 @@ RValue<UShort8> PackUnsigned(RValue<Int4> x, RValue<Int4> y)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto pack = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto pack = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
pack->addArg(x.value());
pack->addArg(y.value());
::basicBlock->appendInst(pack);
@@ -3728,8 +3697,7 @@ RValue<Int> SignMask(RValue<Int4> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto movmsk = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
movmsk->addArg(x.value());
::basicBlock->appendInst(movmsk);
@@ -3901,8 +3869,7 @@ RValue<Float> Sqrt(RValue<Float> x)
RR_DEBUG_INFO_UPDATE_LOC();
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto sqrt = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto sqrt = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
sqrt->addArg(x.value());
::basicBlock->appendInst(sqrt);
@@ -4057,8 +4024,7 @@ RValue<Float4> Sqrt(RValue<Float4> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto sqrt = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto sqrt = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
sqrt->addArg(x.value());
::basicBlock->appendInst(sqrt);
@@ -4078,8 +4044,7 @@ RValue<Int> SignMask(RValue<Float4> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto movmsk = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto movmsk = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
movmsk->addArg(x.value());
::basicBlock->appendInst(movmsk);
@@ -4171,8 +4136,7 @@ RValue<Float4> Round(RValue<Float4> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto round = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto round = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
round->addArg(x.value());
round->addArg(::context->getConstantInt32(0));
::basicBlock->appendInst(round);
@@ -4192,8 +4156,7 @@ RValue<Float4> Trunc(RValue<Float4> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto round = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto round = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
round->addArg(x.value());
round->addArg(::context->getConstantInt32(3));
::basicBlock->appendInst(round);
@@ -4234,8 +4197,7 @@ RValue<Float4> Floor(RValue<Float4> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto round = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto round = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
round->addArg(x.value());
round->addArg(::context->getConstantInt32(1));
::basicBlock->appendInst(round);
@@ -4255,8 +4217,7 @@ RValue<Float4> Ceil(RValue<Float4> x)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto round = Ice::InstIntrinsicCall::create(::function, 2, result, target, intrinsic);
+ auto round = Ice::InstIntrinsic::create(::function, 2, result, intrinsic);
round->addArg(x.value());
round->addArg(::context->getConstantInt32(2));
::basicBlock->appendInst(round);
@@ -4303,8 +4264,7 @@ void Breakpoint()
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto trap = Ice::InstIntrinsicCall::create(::function, 0, nullptr, target, intrinsic);
+ auto trap = Ice::InstIntrinsic::create(::function, 0, nullptr, intrinsic);
::basicBlock->appendInst(trap);
}
@@ -4312,8 +4272,7 @@ void Nucleus::createFence(std::memory_order memoryOrder)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto inst = Ice::InstIntrinsicCall::create(::function, 0, nullptr, target, intrinsic);
+ auto inst = Ice::InstIntrinsic::create(::function, 0, nullptr, intrinsic);
auto order = ::context->getConstantInt32(stdToIceMemoryOrder(memoryOrder));
inst->addArg(order);
::basicBlock->appendInst(inst);
@@ -4493,8 +4452,7 @@ RValue<UInt> Ctlz(RValue<UInt> x, bool isZeroUndef)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto ctlz = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto ctlz = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
ctlz->addArg(x.value());
::basicBlock->appendInst(ctlz);
@@ -4534,8 +4492,7 @@ RValue<UInt> Cttz(RValue<UInt> x, bool isZeroUndef)
{
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 };
- auto target = ::context->getConstantUndef(Ice::IceType_i32);
- auto ctlz = Ice::InstIntrinsicCall::create(::function, 1, result, target, intrinsic);
+ auto ctlz = Ice::InstIntrinsic::create(::function, 1, result, intrinsic);
ctlz->addArg(x.value());
::basicBlock->appendInst(ctlz);