|
From: Borja F. <bor...@gm...> - 2013-07-15 16:52:47
|
Thanks!
I've been cleaning a bit the code, and fixed a possible crash here:
+ CanHandleRegImmOpt &= ImmNode != 0;+ CanHandleRegImmOpt &=
ImmNode->getAPIntValue().getZExtValue() < 64;
Since ImmNode comes from a dyncast, if it's NULL the second line would crash.
There's a piece of code i initially removed because i found it redundant:
+ if (ImmNode->getValueType(0) != MVT::i8)+ {+ Disp =
CurDAG->getTargetConstant(+
ImmNode->getAPIntValue().getZExtValue(), MVT::i8);+ }+ else+
{+ Disp = ImmOp;+ }
but without im getting crashes. Can you explain why this happens and is needed?
2013/7/15 Stepan Dyatkovskiy <stp...@na...>
> r269
> -Stepan
> Borja Ferrer wrote:
>
>> Ohhh this is a lot better, atleast fixing patches iteratively brought us
>> to a nice solution :)
>>
>> If this patch passes all tests with the machine verifier enabled then
>> feel free to commit it. I'll take a look at the glue operands after this.
>>
>>
>> 2013/7/12 Stepan Dyatkovskiy <stp...@na... <mailto:stp...@na...
>> >>
>>
>>
>> Hello Borja.
>> Seems I've made things much simpler. Can't understand why I didn't
>> it in beginning.
>>
>> I moved everything into SelectInlineAsmMemoryOperand hook.
>> #1: We don't need 'for' at all. Since it implemented in hook caller.
>> #2: This problem disappeared, see #1.
>> #4: The same.
>> #6: Still not sure about glues. I just tried to keep all chains in
>> proper order. But you rather look at new SelectInlineAsmMemoryOperand.
>>
>>
>> > One last thing, when you run the regression tests, enable locally
>> the
>> > machine verifier to catch any additional errors. To enable it
>> > unconditionally search for the command object (i think it's
>> declared in
>> > codegen/passes.cpp as a cl::opt) and turn it on by default. When
>> you're
>> > doing your own tests you can enable it passing
>> -verify-machineisntrs or
>> > something like that to llc.
>> OK.
>>
>> -Stepan.
>>
>>
>> Borja Ferrer wrote:
>>
>> Hello Stepan,
>>
>> 1) Wow, those are really big conditions xD. You could split them
>> into
>> single conditions and use continues:
>> if (cond 1) continue;
>> if (cond 2) continue;
>> etc...
>>
>> instead of having a huge if() that is quite hard to read.
>>
>> 2) Yes I thought about that aswell, that not all constant nodes
>> are asm
>> flags, but the ARM backend does this, so either they have a bug
>> there or
>> it's safe?
>> I prefer if you could move the big condition inside the for()
>> into the
>> top of the loop, it makes the for() quite unreadable. And adjust
>> there
>> the i variable as needed for each suboperand as you mentioned
>> before.
>>
>> 4) Why do you say they handle everything in the SelectInlineAsm
>> method?
>> As far as i can see they only handle one specific case,
>> otherwise they
>> return NULL and let the default behaviour do the work.
>>
>> 6) Yes glues are a bit tricky, dont worry about them, I will fix
>> them
>> when this gets commited.
>>
>> One last thing, when you run the regression tests, enable
>> locally the
>> machine verifier to catch any additional errors. To enable it
>> unconditionally search for the command object (i think it's
>> declared in
>> codegen/passes.cpp as a cl::opt) and turn it on by default. When
>> you're
>> doing your own tests you can enable it passing
>> -verify-machineisntrs or
>> something like that to llc.
>>
>>
>>
>>
>
|