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