compiler construction - Adding the inreg attribute to LLVM IR function parameters -


i'm working llvm , want recreate piece of ir api:

declare void @fun(i32* inreg, i32 inreg) 

but can't seem it.

my current attempt is:

function* fun = cast<function>(m.getorinsertfunction("fun",type));  ((fun -> getattributes()).getparamattributes(0)).addattribute(c,0,attribute::inreg);  ((fun -> getattributes()).getparamattributes(1)).addattribute(c,0,attribute::inreg); 

this code literally doesn't after line 1, lines 2 , 3 ignored , in ir output is:

declare void @fun(i32* , i32 ) 

how work correctly?

managing function attributes in llvm quite inconvenient attributes packed immutable , global sets. assigning attribute function argument means replacing set representing function , argument attributes new one.

fortunately, there @ least helper functions makes job bit easier. suggest using llvm::function::addattribute() method.

function* fun = cast<function>(m.getorinsertfunction("fun", type)); fun->addattribute(1, attribute::inreg); fun->addattribute(2, attribute::inreg); 

keep in mind index 0 represents function attributes, argument attributes starts index 1.


Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -