|
From: Stepan D. <stp...@na...> - 2013-07-15 17:30:39
|
Hi Borja,
> + CanHandleRegImmOpt &= ImmNode != 0;
> + CanHandleRegImmOpt &= ImmNode->getAPIntValue().getZExtValue() < 64;
You absolutely right here. Thanks.
> 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;
> + }
Initially did the same: just "Disp = ImmOp", and got the crash. I don't
remember what crash says exactly. Currently, I'm not able to compile
anything. What I had found out is that Disp (aka displacement) should be
i8 only. Our back-end just don't expect other types of displacements.
-Stepan.
Borja Ferrer wrote:
> 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... <mailto: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...> <mailto: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.
>
>
>
>
>
|