[LLVMdev] could you give me some advice ?

lizhuo aqex at bsv.com.cn
Sun Mar 26 19:10:46 PST 2006


excuse me for bother you again .
a little supplement

Constant* c = findValue(m,"E1$entry");
Constant* c2 = findValue(m,"E1$str");

I can get string object from c2 
string s = cast<ConstantArray>(c2)->getAsString();

but it is not  applicable for c
string s= cast<ConstantArray>(c)->getAsString(); // Assert Fail

because c is ConstantExpr::GetElementPtr actually , not ConstantArray
so I have to get string object like this : 	
GlobalVariable* gv = cast<GlobalVariable>(c->getOperand(0));
ConstantArray* ca = cast<ConstantArray>(gv->getOperand(0));
std::string str = ca->getAsString();
I feel this code a little awkward .
I wonder whether it should to be improved ?
thanks again

>On Sat, 25 Mar 2006, lizhuo wrote:
>> ; define ConstantArray
>> "E1$str" = internal constant [3 x sbyte] c"E1\00"
>>
>> ; use getPtrPtrFromArrayPtr to define SByte* from ConstantArray
>> "E1$entry" = internal constant sbyte* getelementptr ([3 x sbyte]* "E1$str", uint 0, uint 0)
>> ...
>>
>> when i want to get std::string object from this declaration in another program
>>
>> 	Module* m = loadModule("XXX.bc");
>> 	Constant* c =  findValue(m,"E1$entry");
>> 	GlobalVariable* gv = cast<GlobalVariable>(c->getOperand(0));
>> 	ConstantArray* ca = cast<ConstantArray>(gv->getOperand(0));
>> 	std::string str = ca->getAsString();
>>
>> now str = "E1"
>> these code looks a little ugly , could you tell me better solution ?
>> In another word , I want to know the reverse operation of ConstantExpr::getPtrPtrFromArrayPtr .
>
>I'm not sure I understand.  You have a pointer to "E1$entry" and you want 
>the string it points to?  I assume this is what your findValue 
>function does?
>
>-Chris
>





More information about the llvm-dev mailing list