[llvm-commits] [llvm] r55781 - /llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp
Dale Johannesen
dalej at apple.com
Mon Sep 22 11:02:06 PDT 2008
On Sep 22, 2008, at 10:48 AMPDT, Chris Lattner wrote:
> On Sep 22, 2008, at 10:39 AM, Dale Johannesen wrote:
>>> On Sep 4, 2008, at 11:30 AM, Dale Johannesen wrote:
>>>> Author: johannes
>>>> Date: Thu Sep 4 13:30:46 2008
>>>> New Revision: 55781
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=55781&view=rev
>>>> Log:
>>>> Add intrinsic forms of pow and exp2. The non-intrinsic
>>>> forms remain to handle older IR files, but will go away soon.
>>>
>>> You want to remove handling of "powf" and only handle
>>> "llvm.pow.f32"? Why?
>>>
>>> -Chris
>>
>> Because I don't think the BE should be sensitive to the source
>> language.
>
> You don't think that LLVM should allow source-language-specific
> passes?
No.
(To be sure, every compiler IR starts out with the goal of keeping
language-specific knowledge out of the BE and target-specific
knowledge out of the FE, but I'm not sure any succeeds completely.
ANDF might have.)
>>>> That said, I think it is useful to distinguish between
>>>> SimplifyLibcalls (SLC) and the rest of the compiler.
>>>
>>> Yes, SLC is specific to code that is using the standard C
>>> library. If you were writing a compiler for some language which
>>> had 'sin' mean something unusual, you'd just not run it.
>>
>> I don't think this makes sense. What about languages that have
>> some of the standard C functions but not all of them?
>
> This doesn't have anything to do with the backend knowing about
> source language: we already have this problem with GCC and C. GCC
> supports -fno-builtin-foo. We need a better way to model this, and
> that way may be to add intrinsics for everything that the optimizer
> looks at, but there are other options.
>
>> This code should be language-independent, with any semantic
>> information (such as errno usage) encoded in the intrinisic; then
>> the BE can apply semantics appropriately. (This, rarely enough,
>> is a case where gcc got the design right.)
>
> I agree that the IR should capture errno assumptions/behavior. For
> more of these functions, that can be done with readnone/readonly.
Actually neither readnone nor readonly does a good job of capturing
the semantics of (say) log; we want something in between that means
"reads rounding mode but not memory". As discussed elsewhere.
More information about the llvm-commits
mailing list