[clang] [llvm] [IR][HLSL] Add llvm.structured.gep instruction (PR #176145)
Sebastian Neubauer via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 15 05:51:29 PST 2026
Nathan =?utf-8?q?Gauër?= <brioche at google.com>,
Nathan =?utf-8?q?Gauër?= <brioche at google.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/176145 at github.com>
================
@@ -1923,6 +1924,19 @@ class IRBuilderBase {
return Insert(new AtomicRMWInst(Op, Ptr, Val, *Align, Ordering, SSID));
}
+ StructuredGEPInst *CreateStructuredGEP(Type *BaseType, Value *PtrBase,
+ ArrayRef<llvm::Value *> Indices,
+ const Twine &Name = "") {
+ SmallVector<llvm::Value *, 4> Args;
+ Args.push_back(llvm::PoisonValue::get(BaseType));
+ Args.push_back(PtrBase);
+ llvm::append_range(Args, Indices);
+
+ return cast<StructuredGEPInst>(
+ CreateIntrinsic(Intrinsic::structured_gep,
+ {PtrBase->getType(), BaseType}, Args, {}, Name));
----------------
Flakebi wrote:
`preserve_struct_access_index` is another intrinsic that uses elementtype, it adds it like this:
```c++
CallInst *Fn =
CreateIntrinsic(Intrinsic::preserve_struct_access_index,
{ResultType, BaseType}, {Base, GEPIndex, DIIndex});
Fn->addParamAttr(
0, Attribute::get(Fn->getContext(), Attribute::ElementType, ElTy));
```
https://github.com/llvm/llvm-project/pull/176145
More information about the cfe-commits
mailing list