gpt4 book ai didi

c++ - CallInst::Create() 在 LLVM 中返回什么?

转载 作者:行者123 更新时间:2023-11-30 03:44:35 28 4
gpt4 key购买 nike

考虑

static CallInst *Create(Value *Func,
ArrayRef<Value *> Args,
const Twine &NameStr = "",
Instruction *InsertBefore = 0)

这个函数,我想知道这个函数的返回值是什么意思。

例如,在下面的代码中,

int foo(int a);
...
Function *foo_ptr = ~~;//say, foo is refered through getOrInsertFunction()
CallInst *ptr = CallInst::Create(foo_ptr, .../* properly set */);

CallInst *ptr 是返回值。抽象的说,ptr是不是表示

  1. int foo(int) 返回的整数值;
  2. 或CALL指令

我以为数字 2 是答案,但在查看一些代码时开始感到困惑。

最佳答案

1 和 2 都是“真”。它返回调用指令,当我们执行代码时,其“值”将是函数的返回值。

为了说明,请看这个 Pascal 小程序:

program p;

function f: integer;
begin
f := 42;
end; { f }

begin
writeln(f);
end.

转换为这个 LLVM-IR:

; ModuleID = 'TheModule'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%text = type { i32, i8*, i32, i32 }

@input = global %text zeroinitializer, align 8
@output = global %text zeroinitializer, align 8
@UnitIniList = constant [1 x i8*] zeroinitializer

define i32 @P.f() #0 {
entry:
%f = alloca i32, align 4
store i32 42, i32* %f
%0 = load i32, i32* %f
ret i32 %0
}

define void @__PascalMain() #0 {
entry:
%calltmp = call i32 @P.f()
call void @__write_int(%text* @output, i32 %calltmp, i32 0)
call void @__write_nl(%text* @output)
ret void
}

declare void @__write_int(%text*, i32, i32)

declare void @__write_nl(%text*)

attributes #0 = { "no-frame-pointer-elim"="true" }

call i32 @P.f()产生于:

inst = builder.CreateCall(calleF, argsV, "calltmp");

inst的内容是%calltmp = call i32 @P.f() - 那是 CallInst “值(value)”。

inst返回到对 writeln 参数的表达式的求值.

关于c++ - CallInst::Create() 在 LLVM 中返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35356712/

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