[LLVMdev] [DragonEgg] Why Fortran's "call flush()" is converted to "call void bitcast (void (...)* @_gfortran_flush_i4 to void (i8*)*)(i8* null) nounwind" ?

Duncan Sands baldrick at free.fr
Tue Jul 17 08:50:34 PDT 2012


Hi Dmitry, it would be neater to use stripPointerCasts.

Ciao, Duncan.

> OK, at our end the following workaround seems to be sufficient:
>
>                      // Check if function is called (needs -instcombine pass).
>                      Function* callee = call->getCalledFunction();
>                      if (!callee)
>                      {
>                          // Could be also a function called inside a bitcast.
>                          // So try to extract function from the underlying
> constant expression.
>                          // Required to workaround GCC/DragonEGG issue:
>                          //
> http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-July/051786.html
>                          ConstantExpr* expr =
> dyn_cast<ConstantExpr>(call->getCalledValue());
>                          if (!expr) continue;
>                          callee = dyn_cast<Function>(expr->getOperand(0));
>                      }
>
> *Hopefully* there will be no more gcc-generated special cases :)
>
> Thanks,
> - D.
>
> 2012/7/17 Duncan Sands <baldrick at free.fr <mailto:baldrick at free.fr>>
>
>     Hi Anton,
>
>
>     On 17/07/12 15:35, Anton Korobeynikov wrote:
>
>             actually there is a different fix, which is to not pay any attention
>             to GCC
>             function types when generating calls (and function prototypes), and
>             instead
>             do everything by querying GCC's CUMULATIVE_ARGS.
>
>         I tried to do this during llvm-gcc times and it turned out that there
>         might be different calls with different signatures in single module
>         e.g. function with N arguments is called in some cases with N - 1
>         first args and since the remaining one is unused everything is fine.
>         So, basically the function *is* varargs but it's not possible to
>         deduce this from the args...
>
>         I don't recall all the details now though...
>
>
>     yes, it is a can of worms, but I'm hopeful it can be made to work anyway.
>
>     Ciao, Duncan.
>
>
>
>
> _______________________________________________
> 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