[LLVMdev] Difference between 2.9 and 3.0 in intel ASM printer

Matthew Huck matthew.huck at gmail.com
Wed Apr 4 18:43:35 PDT 2012


Hi,
  I'm almost there with my Yasm printer, however, I've stumbled upon this.

Using this:


; ModuleID = 'data.u'

%window = type { %visobj, %vec2, %vec2, %vec2, %string, %color, i32, i32,
%string, %string, %string, i1, i1, i1, i1, i1, i1, i32, i8* }
%visobj = type { %object, i1, i1, i1, i1, %color, %vec4, %vec4, %vec4,
%vec4, i32, %mat4, %mat4, %mat4, %mat4, %material*, %effect*, i32, i32,
i32, float, i8, %visobj*, %vec3, %vec3, %vec3, %vec3, %vec3, %vec3, %quat,
float, float, float, float, float, float, %map, i8* }
%object = type { i8, i8, i8, i8, i8, i8, i8, i8, %string, %string, i8* }
%string = type { i8* }
%color = type { i8, i8, i8, i8 }
%vec4 = type { float, float, float, float }
%mat4 = type { float, float, float, float, float, float, float, float,
float, float, float, float, float, float, float, float, i8 }
%material = type { %object, %color, %color, %color, %color, float, float,
%texture, %texture, %texture, %texture, %effect*, i32, i32, i1, i32, i32,
i1, i1, i8* }
%texture = type { %object, float, float, %vec3, %vec3, %vec3, i1, i1, i1,
i1, i1, i1, i8* }
%vec3 = type { float, float, float }
%effect = type { %object, i1, i1, i32, i32, i32, i32, i8* }
%quat = type { float, float, float, float }
%map = type { i8*, i32, i8* }
%vec2 = type { float, float }
%program = type { %object, %string, %string, %list, i8*, i32 }
%list = type { i8, i8, i8, i8 }

@G__window__PZ6window = external global %window
@G__program__PZ7program = external global %program
@"data.u\00" = internal constant [7 x i8] c"data.u\00"
@g_touch_window_y = global i32 0
@_language_text = global %string zeroinitializer
@"Hello\00" = internal constant [6 x i8] c"Hello\00"
@is_foreign_lang = global i1 false
@"english\00" = internal constant [8 x i8] c"english\00"
@"cstr\00" = internal constant [5 x i8] c"cstr\00"

declare %string* @to__PZ6string__PKc(i8*) nounwind

declare void @AddPointer__v__iPKci(i32, i8*, i32) nounwind

declare void @dL__v__PZ6string(%string*) nounwind

declare zeroext i1 @ne__b__PZ6stringPZ6string(%string*, %string*) nounwind

declare void @aS__v__PZ6stringPKc(%string*, i8*) nounwind

declare void @C1__v__PZ6string(%string*) nounwind

define i32 @main__i__v() nounwind {
locals:
  store i8* getelementptr inbounds ([7 x i8]* @"data.u\00", i32 0, i32 0),
i8** getelementptr inbounds (%program* @G__program__PZ7program, i32 0, i32
4)
  %0 = load float* getelementptr inbounds (%window* @G__window__PZ6window,
i32 0, i32 1, i32 1)
  %1 = fptosi float %0 to i64
  %2 = trunc i64 %1 to i32
  store i32 %2, i32* @g_touch_window_y
  store i32 2, i32* getelementptr inbounds (%program*
@G__program__PZ7program, i32 0, i32 5)
  tail call void @C1__v__PZ6string(%string* @_language_text) nounwind
  tail call void @aS__v__PZ6stringPKc(%string* @_language_text, i8*
getelementptr inbounds ([6 x i8]* @"Hello\00", i32 0, i32 0)) nounwind
  store i32 3, i32* getelementptr inbounds (%program*
@G__program__PZ7program, i32 0, i32 5)
  %3 = tail call %string* @to__PZ6string__PKc(i8* getelementptr inbounds
([8 x i8]* @"english\00", i32 0, i32 0))
  %4 = tail call i1 @ne__b__PZ6stringPZ6string(%string* @_language_text,
%string* %3) nounwind
  store i1 %4, i1* @is_foreign_lang
  tail call void @dL__v__PZ6string(%string* %3) nounwind
  ret i32 0
}

define void @typesInit__v__v() nounwind {
entry:
  tail call void @AddPointer__v__iPKci(i32 1927, i8* getelementptr inbounds
([5 x i8]* @"cstr\00", i32 0, i32 0), i32 -59) nounwind
  ret void
}



The intel asm printer in 2.9 would emit:

mov BYTE PTR [RIP + _is_foreign_lang], AL

for the
  store i1 %4, i1* @is_foreign_lang

yet, 3.0 emits:
   mov _is_foreign_lang, AL

Now, I've tried diffing 2.9 and 3.0, there is a lot of changes, could
someone give me a hint as to where to look?
Thanks in advance

Matthew.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120405/b62f007c/attachment.html>


More information about the llvm-dev mailing list