Skip to content

Commit 572e44d

Browse files
krystian-andrzejewskiigcbot
authored andcommitted
Replacing usages of getNonOpaquePtrEltTy in AdaptorCommon - part 3
This change set is to prepare for removing dependencies on references to non-opaque pointers.
1 parent 4c721ce commit 572e44d

File tree

3 files changed

+19
-20
lines changed

3 files changed

+19
-20
lines changed

IGC/AdaptorCommon/RayTracing/RTBuilder.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -497,15 +497,15 @@ std::pair<BasicBlock*, PHINode*> RTBuilder::validateInstanceLeafPtr(
497497
// % "&ShadowMemory.RayQueryObjects".first = alloca[5 x % "struct.RTStackFormat::RTStack2"]
498498
// % "&ShadowMemory.RayQueryObjects".second = alloca[5 x int8]
499499
//
500-
std::pair<Value*, Value*> RTBuilder::createAllocaRayQueryObjects(unsigned int size, bool bShrinkSMStack, const llvm::Twine& Name)
500+
std::pair<AllocaInst*, AllocaInst*> RTBuilder::createAllocaRayQueryObjects(unsigned int size, bool bShrinkSMStack, const llvm::Twine& Name)
501501
{
502502
//FIXME: Temp solution: to shrink ShadowMemory, if ShrinkShadowMemoryIfNoSpillfill is true (we know no spillfill), then,
503503
//we alloca SMStack instead of RTStack to reduce the size. Also, here, we simply cast SMStack pointer to RTStack which is risky
504504
//and it's safe now if we only shrink the last variable of RTStack (MemTravStack).
505505
//But don't shrink data in the middle of RTStack which will lead to holes.
506506
auto* RTStackTy = bShrinkSMStack ? getSMStack2Ty() : getRTStack2Ty();
507507

508-
Value* rtStacks = this->CreateAlloca(
508+
AllocaInst* rtStacks = this->CreateAlloca(
509509
ArrayType::get(RTStackTy, size),
510510
nullptr,
511511
Name);
@@ -516,7 +516,7 @@ std::pair<Value*, Value*> RTBuilder::createAllocaRayQueryObjects(unsigned int si
516516
//to WA this, let's temporily use DW, but sure, this won't solve all other issues.
517517
// %0 = alloca <3 x float>
518518
// store <3 x float> zeroinitializer, <3 x float>* %0
519-
Value* rtCtrls = this->CreateAlloca(
519+
AllocaInst* rtCtrls = this->CreateAlloca(
520520
ArrayType::get(this->getInt32Ty(), size),
521521
nullptr,
522522
Name);
@@ -1388,15 +1388,14 @@ void RTBuilder::setHitValid(StackPointerVal* StackPointer, bool CommittedHit)
13881388
}
13891389
}
13901390

1391-
Value* RTBuilder::getSyncTraceRayControl(Value* ptrCtrl)
1391+
LoadInst* RTBuilder::getSyncTraceRayControl(GetElementPtrInst* ptrCtrl)
13921392
{
1393-
return this->CreateLoad(ptrCtrl, VALUE_NAME("rayQueryObject.traceRayControl"));
1393+
return this->CreateLoad(ptrCtrl->getResultElementType(), ptrCtrl, VALUE_NAME("rayQueryObject.traceRayControl"));
13941394
}
13951395

1396-
void RTBuilder::setSyncTraceRayControl(Value* ptrCtrl, RTStackFormat::TraceRayCtrl ctrl)
1396+
void RTBuilder::setSyncTraceRayControl(GetElementPtrInst* ptrCtrl, RTStackFormat::TraceRayCtrl ctrl)
13971397
{
1398-
Type* eleType = IGCLLVM::getNonOpaquePtrEltTy(ptrCtrl->getType());
1399-
this->CreateStore(llvm::ConstantInt::get(eleType, (uint32_t)ctrl), ptrCtrl);
1398+
this->CreateStore(llvm::ConstantInt::get(ptrCtrl->getResultElementType(), (uint32_t)ctrl), ptrCtrl);
14001399
}
14011400

14021401
Value* RTBuilder::getHitBaryCentric(

IGC/AdaptorCommon/RayTracing/RTBuilder.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ class RTBuilder : public IGCIRBuilder<>
272272

273273
std::pair<BasicBlock*, PHINode*>
274274
validateInstanceLeafPtr(RTBuilder::StackPointerVal* perLaneStackPtr, Instruction* I, bool forCommitted);
275-
std::pair<Value*, Value*> createAllocaRayQueryObjects(unsigned int size, bool bShrinkSMStack, const llvm::Twine& Name = "");
275+
std::pair<AllocaInst*, AllocaInst*> createAllocaRayQueryObjects(unsigned int size, bool bShrinkSMStack, const llvm::Twine& Name = "");
276276

277277
void setDoneBit(StackPointerVal* StackPointer, bool Committed);
278278
Value* alignVal(Value* V, uint64_t Align);
@@ -356,8 +356,8 @@ class RTBuilder : public IGCIRBuilder<>
356356
bool Committed);
357357
Value* getHitValid(StackPointerVal* StackPointer, bool CommittedHit);
358358
void setHitValid(StackPointerVal* StackPointer, bool CommittedHit);
359-
Value* getSyncTraceRayControl(Value* ptrCtrl);
360-
void setSyncTraceRayControl(Value* ptrCtrl, RTStackFormat::TraceRayCtrl ctrl);
359+
LoadInst* getSyncTraceRayControl(GetElementPtrInst* ptrCtrl);
360+
void setSyncTraceRayControl(GetElementPtrInst* ptrCtrl, RTStackFormat::TraceRayCtrl ctrl);
361361
Value* getHitBaryCentric(StackPointerVal* StackPointer, uint32_t idx, bool CommittedHit);
362362

363363

IGC/AdaptorCommon/RayTracing/TraceRayInlineLoweringPass.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ class TraceRayInlineLoweringPass : public FunctionPass
5555
//m_ShMemRTCtrls is an array of RTStackFormat::RTCtrl in ShadowMemory
5656
//together, they are RayQueryObjects[n]
5757
//RTStack2/SMStack2 m_ShMemRTStacks[n]
58-
Value* m_ShMemRTStacks = nullptr;
58+
AllocaInst* m_ShMemRTStacks = nullptr;
5959
//RayQueryStateInfo m_ShMemRTCtrls[n]
60-
Value* m_ShMemRTCtrls = nullptr;
60+
AllocaInst* m_ShMemRTCtrls = nullptr;
6161
CodeGenContext* m_CGCtx = nullptr;
6262
bool singleRQMemRayStore = false;
6363
//if there is only one Proceed and it's not in a loop, then, we only need to prepare data for Proceed() once
@@ -78,14 +78,14 @@ class TraceRayInlineLoweringPass : public FunctionPass
7878
void LowerCommitProceduralPrimitiveHit(Function& F);
7979

8080
//return m_ShMemRTCtrls[index]
81-
Value* getShMemRTCtrl(RTBuilder& builder, unsigned queryIndex) {
81+
GetElementPtrInst* getShMemRTCtrl(RTBuilder& builder, unsigned queryIndex) {
8282
return getShMemRTCtrl(builder, builder.getInt32(queryIndex));
8383
}
8484

8585
//return m_ShMemRTCtrls[index]
86-
Value* getShMemRTCtrl(RTBuilder& builder, Value* queryIndex) {
87-
return builder.CreateGEP(cast<llvm::AllocaInst>(m_ShMemRTCtrls)->getAllocatedType(),
88-
m_ShMemRTCtrls, { builder.getInt32(0), queryIndex }, VALUE_NAME("&shadowMem.RTCtrl"));
86+
GetElementPtrInst* getShMemRTCtrl(RTBuilder& builder, Value* queryIndex) {
87+
return GetElementPtrInst::Create(m_ShMemRTCtrls->getAllocatedType(),
88+
m_ShMemRTCtrls, { builder.getInt32(0), queryIndex }, VALUE_NAME("&shadowMem.RTCtrl"), &(*builder.GetInsertPoint()));
8989
}
9090

9191
//return rtStacks[index]
@@ -96,7 +96,7 @@ class TraceRayInlineLoweringPass : public FunctionPass
9696
//return rtStacks[index]
9797
RTBuilder::SyncStackPointerVal* getShMemRayQueryRTStack(RTBuilder& builder, Value* queryIndex) {
9898
return static_cast<RTBuilder::SyncStackPointerVal*>(
99-
builder.CreateGEP(cast<llvm::AllocaInst>(m_ShMemRTStacks)->getAllocatedType(),
99+
builder.CreateGEP(m_ShMemRTStacks->getAllocatedType(),
100100
m_ShMemRTStacks, { builder.getInt32(0), queryIndex }, VALUE_NAME("&shadowMem.RTStack")));
101101
}
102102

@@ -360,8 +360,8 @@ Value* TraceRayInlineLoweringPass::emitProceedMainBody(
360360
builder.copyMemHitInProceed(HWStackPointer, ShadowMemStackPointer, singleRQProceed, usesDeprecatedCopyMemHitInRQProceed);
361361

362362
//get ray Current ray control for object
363-
Value* ShdowMemRTCtrlPtr = getShMemRTCtrl(builder, queryObjIndex);
364-
Value* traceRayCtrl = builder.getSyncTraceRayControl(ShdowMemRTCtrlPtr);
363+
GetElementPtrInst* ShdowMemRTCtrlPtr = getShMemRTCtrl(builder, queryObjIndex);
364+
LoadInst* traceRayCtrl = builder.getSyncTraceRayControl(ShdowMemRTCtrlPtr);
365365

366366
if (IGC_IS_FLAG_ENABLED(DisableLoadAsFenceOpInRaytracing))
367367
{

0 commit comments

Comments
 (0)