how to get the InvodInst 's Operand Name?

HI all,

here is a llvm IR :

invoke void @__cxa_throw(i8* %7, i8* bitcast
(%struct.__fundamental_type_info_pseudo* @_ZTIi to i8*), void (i8*)*
null)
noreturn to label %invcont unwind label %lpad

say I want to get the Invoke's Operand's name, I use
getOperand(i)->getName(), it can work for that the Operand hasname,
but some Operand hasn't name,
So, My problem is how can i get all the Operand 's name ?

zhangzw

Hi zhangzw,

invoke void @__cxa_throw(i8* %7, i8* bitcast
(%struct.__fundamental_type_info_pseudo* @_ZTIi to i8*), void (i8*)*
null)
noreturn to label %invcont unwind label %lpad

say I want to get the Invoke's Operand's name

are you trying to get the name "@_ZTIi" or "@__cxa_throw"?

Ciao,

Duncan.

Hi Duncan,

are you trying to get the name "@_ZTIi" or "@__cxa_throw"?

yes! i want get the name @_ZTi or @__cxa_throw,
the latter @__cxa_throw i can get it throw value->getName(), but the
@_ZTi it did n't has name!

zhangzw
thanks

Hi zhangzw,

invoke void @__cxa_throw(i8* %7, i8* bitcast
(%struct.__fundamental_type_info_pseudo* @_ZTIi to i8*), void (i8*)*
null)
noreturn to label %invcont unwind label %lpad

>>are you trying to get the name "@_ZTIi" or "@__cxa_throw"?

yes! i want get the name @_ZTi or @__cxa_throw,
the latter @__cxa_throw i can get it throw value->getName(), but the
@_ZTi it did n't has name!

if II is the invoke instruction, you can get the names as follows:

  "@__cxa_throw": II->getCalledFunction()->getValueName()
  "@_ZTi": II->getOperand(4)->stripPointerCasts()->getValueName()

The first one won't work for indirect calls. The second one
won't work in more complicated situations. Why do you want
the names anyway?

Ciao,

Duncan.

Hi Duncan,

thanks ! hehe .

Why do you want the names anyway?

because i 'am working on llvm to support sjlj-eh for my target.
for my side, I lookup the llvm invoke instruction to build the sjlj-eh
on sjlj-eh it's need store the landing pad index to stack before
call __cxa_throw,
but it seems no ! in llvm-backend because it only suport dwarf-eh!
so i have to build another node to store landingpad index to stack
before llvm invoke instruction.
am i write for the direction? hehe.

zhangzw

Hi zhangzw,

>> Why do you want the names anyway?

because i 'am working on llvm to support sjlj-eh for my target.
for my side, I lookup the llvm invoke instruction to build the sjlj-eh
on sjlj-eh it's need store the landing pad index to stack before
call __cxa_throw,
but it seems no ! in llvm-backend because it only suport dwarf-eh!
so i have to build another node to store landingpad index to stack
before llvm invoke instruction.
am i write for the direction? hehe.

I don't get it. What has this got to do with determining the
names "@__cxa_throw" and "@_ZTi"?

Ciao,

Duncan.

Hi Duncan,

I don't get it.

Sorry my bad English! hehe.

What has this got to do with determining the
names "@__cxa_throw" and "@_ZTi"?

Record the Information into the MachineModule Info, so in Dwarfwriter
or SjLjWriter(my sjlj-eh name)
can build the except table correctly!

Hi Duncan,

I don't get it.

Sorry my bad English! hehe.

What has this got to do with determining the
names "@__cxa_throw" and "@_ZTi"?

Record the Information into the MachineModule Info, so in Dwarfwriter
or SjLjWriter(my sjlj-eh name)
can build the except table correctly!

Is it possible to implement it without using MachineModuleInfo? It's being removed.

Evan