[llvm-commits] [llvm] r130338 - in /llvm/trunk: include/llvm/CodeGen/FastISel.h lib/CodeGen/SelectionDAG/FastISel.cpp lib/Target/X86/X86FastISel.cpp test/CodeGen/X86/fast-isel-x86-64.ll
Eli Friedman
eli.friedman at gmail.com
Thu Apr 28 21:08:36 PDT 2011
On Thu, Apr 28, 2011 at 1:21 AM, Frits van Bommel <fvbommel at gmail.com> wrote:
> On Thu, Apr 28, 2011 at 12:41 AM, Eli Friedman <eli.friedman at gmail.com> wrote:
>> + virtual unsigned TargetMaterializeFloatZero(const ConstantFP* CF) {
>> + return 0;
>> + }
>
>> getRegForValue(Constant::getNullValue(TD.getIntPtrType(V->getContext())));
>> } else if (const ConstantFP *CF = dyn_cast<ConstantFP>(V)) {
>> - // Try to emit the constant directly.
>> - Reg = FastEmit_f(VT, VT, ISD::ConstantFP, CF);
>> + if (CF->isZero()) {
>> + Reg = TargetMaterializeFloatZero(CF);
>> + } else {
>> + // Try to emit the constant directly.
>> + Reg = FastEmit_f(VT, VT, ISD::ConstantFP, CF);
>> + }
>
> This doesn't seem to handle the case where FastEmit_f() would work but
> TargetMaterializeFloatZero() isn't overridden, which would be the
> "obvious" way to implement a target that doesn't need to handle 0.0
> specially.
> IMHO, this should either try TargetMaterializeFloatZero() first and
> fall back to FastEmit_f if it returns 0, or the default
> TargetMaterializeFloatZero() implementation should be changed to call
> FastEmit_f().
Maybe... in practice, it doesn't matter at the moment, and this stuff
will disappear if we add support for fast-isel matching specific
immediates.
-Eli
More information about the llvm-commits
mailing list