gpt4 book ai didi

具有运行时值的 LLVM GEP

转载 作者:行者123 更新时间:2023-12-01 23:31:04 36 4
gpt4 key购买 nike

我有一个类型定义为 %Colour = type { { i32, i32, i32 }, %RED*, %GREEN*, %BLUE*, %RGB* },我使用第一个存储 RTTI 的字段,我将字段加载到 Colour*.0.0.2 并将其保存在变量“arity”中,但是当我尝试再次对对象执行 GEP 以获取 RGB*builder.CreateInBoundsGEP(valType, val, {builder.getInt32(0), arity}) 我收到“无效的 GetElementPtrInst 类型索引!”。转储类型我得到了 i32,如我所料,我做错了什么?

我不能在 GEP 中使用运行时值吗?我问是因为,在我遇到这个问题之后,我尝试将其更改为 builder.CreateInBoundsGEP(valType, val, {builder.getInt32(0), builder.getInt32(4)}) 产生预期的结果%2 = getelementptr inbounds %Colour, %Colour* %0, i32 0, i32 4 的结果所以我可以加载它 %3 = load %RGB*, %RGB** % 2

最佳答案

Can I not use a runtime value in a GEP?

在索引到该类型的结构组件时,您必须使用常量索引。否则不可能静态地知道 GEP 指令的类型

换句话说,自getelementptr inbounds %Colour, %Colour* %0, i32 0, <strong>i32 4</strong>%RGB**%y = getelementptr inbounds %Colour, %Colour* %0, i32 0, <strong>i32 3</strong>%BLUE** ,并且 GEP 的类型必须是静态已知的,最后一个索引必须是常量。

数组中的 GEP 索引不必是常量。

这就是全部 written explicitly in the langref :

The type of each index argument depends on the type it is indexing into. When indexing into a (optionally packed) structure, only i32 integer constants are allowed (when using a vector of indices they must all be the same i32 integer constant). When indexing into an array, pointer or vector, integers of any width are allowed, and they are not required to be constant. These integers are treated as signed values where relevant.

(强调我的)

关于具有运行时值的 LLVM GEP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35604289/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com