[LLVMdev] Writing instructions to file

Tanya Lattner tonic at nondot.org
Mon Nov 17 20:40:33 PST 2008


A good way to figure out how to represent things in IR is to write a C  
program that does what you want and then use llvm-gcc to see the  
instructions that are generated.

-Tanya

On Nov 17, 2008, at 8:30 PM, bhavani krishnan wrote:

> Hello all,
> I am instrumenting the code such that I write the results of some  
> instructions to file. As you can see below, I am writing the results  
> of add instruction to the file. The IR generated for writeToFile is  
> also posted below. My problem is that it is writing to the file in  
> format bytes  and it is not human-readable. How do I make it write  
> human readable strings to the file?
>
> define i32 @add(i32 %a, i32 %b) nounwind  {
> entry:
> 	%tmp3 = add i32 %b, %a		; <i32> [#uses=2]
> 	alloca i32		; <i32*>:0 [#uses=2]
> 	store i32 %tmp3, i32* %0, align 4
> 	bitcast i32* %0 to i8*		; <i8*>:1 [#uses=1]
> 	tail call void @writeToFile( i8* %1 )
> 	ret i32 %tmp3
> }
>
> define void @writeToFile(i8* %str) {
> entry:
> 	%tmp = tail call %struct.FILE* @fopen( i8* getelementptr ([8 x i8]*  
> @.str, i32 0, i32 0), i8* getelementptr ([2 x i8]* @.str1, i32 0,  
> i32 0) )		; <%struct.FILE*> [#uses=3]
> 	%tmp2 = icmp eq %struct.FILE* %tmp, null		; <i1> [#uses=1]
> 	br i1 %tmp2, label %bb, label %bb5
>
> bb:		; preds = %entry
> 	%tmp4 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([20 x  
> i8]* @.str2, i32 0, i32 0) )		; <i32> [#uses=0]
> 	ret void
>
> bb5:		; preds = %entry
> 	%tmp8 = tail call i32 (%struct.FILE*, i8*, ...)*  
> @fprintf( %struct.FILE* %tmp, i8* %str )		; <i32> [#uses=0]
> 	%tmp10 = tail call i32 @fclose( %struct.FILE* %tmp )		; <i32>  
> [#uses=0]
> 	ret void
> }
>
> declare %struct.FILE* @fopen(i8*, i8*)
>
> declare i32 @printf(i8*, ...)
>
> declare i32 @fprintf(%struct.FILE*, i8*, ...)
>
> declare i32 @fclose(%struct.FILE*)
>
> Thanks,
> Bhavani
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list