[llvm-commits] [Patch] Use TargetTransformInfo to control switch-to-lookup table transform
Nadav Rotem
nrotem at apple.com
Mon Oct 29 09:32:25 PDT 2012
I also agree that this is a good use of the TTI interface. The IR-level passes only know about 'shouldBuildLookupTables'.
On Oct 29, 2012, at 8:45 AM, Hal Finkel <hfinkel at anl.gov> wrote:
> ----- Original Message -----
>> From: "Duncan Sands" <baldrick at free.fr>
>> To: llvm-commits at cs.uiuc.edu
>> Cc: "Nadav Rotem" <nadav.rotem at intel.com>
>> Sent: Monday, October 29, 2012 10:29:21 AM
>> Subject: Re: [llvm-commits] [Patch] Use TargetTransformInfo to control switch-to-lookup table transform
>>
>> Hi Hans,
>>
>>> When the switch-to-lookup tables transform landed in SimplifyCFG,
>>> it
>>> was pointed out [1] that this could be inappropriate for some
>>> targets.
>>> Since there was no way at the time for the pass to know anything
>>> about
>>> the target, an awkward reverse-transform was added in
>>> CodeGenPrepare
>>> that turned lookup tables back into switches for some targets.
>>>
>>> The attached patch uses the new TargetTransformInfo to determine if
>>> a
>>> switch should be transformed, and removes
>>> CodeGenPrepare::ConvertLoadToSwitch. Please take a look!
>>
>> personally I think it is completely wrong to have codegen concepts
>> such as
>> ISD::BR_JT and ISD::BRIND leaking into the IR level:
>
> But these concepts are not leaking into the IR layer. These are contained in Target (in lib/Target/TargetTransformImpl.cpp), and the IR layer does not see them. Also, a target could override this implementation and provide a different one. Nevertheless, the IR layer only sees an abstract interface, and if Target is not linked in, just gets a fixed generic answer.
>
> -Hal
>
>>
>>> --- a/include/llvm/Transforms/Utils/Local.h
>>> +++ b/include/llvm/Transforms/Utils/Local.h
>>> @@ -49,6 +49,12 @@ unsigned
>>> ScalarTargetTransformImpl::getJumpBufSize() const {
>>> return TLI->getJumpBufSize();
>>> }
>>>
>>> +bool ScalarTargetTransformImpl::shouldBuildLookupTables() const {
>>> + return TLI->supportJumpTables() &&
>>> + (TLI->isOperationLegalOrCustom(ISD::BR_JT, MVT::Other) ||
>>> + TLI->isOperationLegalOrCustom(ISD::BRIND, MVT::Other));
>>> +}
>>> +
>>> //===----------------------------------------------------------------------===//
>>> //
>>> // Calls used by the vectorizers.
>>
>> Ciao, Duncan.
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
> --
> Hal Finkel
> Postdoctoral Appointee
> Leadership Computing Facility
> Argonne National Laboratory
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list