[LLVMdev] What happened to "malloc" in LLVM 3.0 IR?

Jacques Menu TvTMail Jacques.Menu at tvtmail.ch
Thu Jan 19 07:33:30 PST 2012


Hello folks,

I have a compiler written with LLVM 2.6 by a student that produces .ll files, It behaved fine at the time.

Trying to take the work over using version 3.0, I run into the problem that "malloc" in the IR is no longer valid:

semac1 menu > llvm-as Carre.ll
llvm-as: Carre.ll:68:14: error: expected instruction opcode
  %_malloc = malloc i8, i32 %2                    ; <i8*> [#uses=1]
             ^

Couldn't find any hint on the web about how to modify the code generation in this compiler to go ahead.

Thanks for your help!

Regards,

--

Faulty line above is part of the following function:

define i8* @lista_sprintf_double(double %number, i32 %taille, i32 %decimales) {
entry:
  %_castInttoDbl = sitofp i32 %decimales to double ; <double> [#uses=1]
  %0 = call i8* @lista_sprintf(i8* getelementptr inbounds ([5 x i8]* @_stringexpr1, i32 0, i32 0), double %_castInttoDbl) ; <i8*> [#uses=2]
  %_castInttoDbl4 = sitofp i32 %taille to double  ; <double> [#uses=1]
  %1 = call i8* @lista_sprintf(i8* getelementptr inbounds ([5 x i8]* @_stringexpr3, i32 0, i32 0), double %_castInttoDbl4) ; <i8*> [#uses=2]
  %_lenL = call i32 @strlen(i8* getelementptr inbounds ([2 x i8]* @_stringexpr4, i32 0, i32 0)) ; <i32> [#uses=1]
  %_lenR = call i32 @strlen(i8* %1)               ; <i32> [#uses=1]
  %_totallen = add i32 %_lenL, 1                  ; <i32> [#uses=1]
  %2 = add i32 %_totallen, %_lenR                 ; <i32> [#uses=1]
  %_malloc = malloc i8, i32 %2                    ; <i8*> [#uses=1]
  %_strcpy = call i8* @strcpy(i8* %_malloc, i8* getelementptr inbounds ([2 x i8]* @_stringexpr4, i32 0, i32 0)) ; <i8*> [#uses=1]
  %_strcat = call i8* @strcat(i8* %_strcpy, i8* %1) ; <i8*> [#uses=2]
  %_lenL5 = call i32 @strlen(i8* %_strcat)        ; <i32> [#uses=1]
  %_lenR6 = call i32 @strlen(i8* getelementptr inbounds ([2 x i8]* @_stringexpr2, i32 0, i32 0)) ; <i32> [#uses=1]
  %_totallen7 = add i32 %_lenL5, 1                ; <i32> [#uses=1]
  %3 = add i32 %_totallen7, %_lenR6               ; <i32> [#uses=1]
  %_malloc8 = malloc i8, i32 %3                   ; <i8*> [#uses=1]
  %_strcpy9 = call i8* @strcpy(i8* %_malloc8, i8* %_strcat) ; <i8*> [#uses=1]
  %_strcat10 = call i8* @strcat(i8* %_strcpy9, i8* getelementptr inbounds ([2 x i8]* @_stringexpr2, i32 0, i32 0)) ; <i8*> [#uses=2]
  %_lenL11 = call i32 @strlen(i8* %_strcat10)     ; <i32> [#uses=1]
  %_lenR12 = call i32 @strlen(i8* %0)             ; <i32> [#uses=1]
  %_totallen13 = add i32 %_lenL11, 1              ; <i32> [#uses=1]
  %4 = add i32 %_totallen13, %_lenR12             ; <i32> [#uses=1]
  %_malloc14 = malloc i8, i32 %4                  ; <i8*> [#uses=1]
  %_strcpy15 = call i8* @strcpy(i8* %_malloc14, i8* %_strcat10) ; <i8*> [#uses=1]
  %_strcat16 = call i8* @strcat(i8* %_strcpy15, i8* %0) ; <i8*> [#uses=2]
  %_lenL17 = call i32 @strlen(i8* %_strcat16)     ; <i32> [#uses=1]
  %_lenR18 = call i32 @strlen(i8* getelementptr inbounds ([2 x i8]* @_stringexpr, i32 0, i32 0)) ; <i32> [#uses=1]
  %_totallen19 = add i32 %_lenL17, 1              ; <i32> [#uses=1]
  %5 = add i32 %_totallen19, %_lenR18             ; <i32> [#uses=1]
  %_malloc20 = malloc i8, i32 %5                  ; <i8*> [#uses=1]
  %_strcpy21 = call i8* @strcpy(i8* %_malloc20, i8* %_strcat16) ; <i8*> [#uses=1]
  %_strcat22 = call i8* @strcat(i8* %_strcpy21, i8* getelementptr inbounds ([2 x i8]* @_stringexpr, i32 0, i32 0)) ; <i8*> [#uses=1]
  %6 = call i8* @lista_sprintf(i8* %_strcat22, double %number) ; <i8*> [#uses=1]
  ret i8* %6
}


--

Dr Jacques MENU
Chargé de cours
Centre Universitaire d'Informatique
Université de Genève
mailto://Jacques.Menu@unige.ch
http://cui.unige.ch/~menu






More information about the llvm-dev mailing list