[aarch64-port-dev ] RFR: aarch64: elide DecodeN when followed by CmpP 0

Andrew Dinn adinn at redhat.com
Mon Sep 21 15:46:45 UTC 2015


Hi Vladimir,

On 16/09/15 17:06, Vladimir Kozlov wrote:
> This is strange. Ideal graph should have CmpN in such case.
> See Compile::final_graph_reshaping_impl() case Op_CmpP:
> Please, look why CmpP is not converted in your case?

You are right that CmpP is not being converted on AArch64. That's
because our ad file implements Matcher::narrow_oop_use_complex_address
as follows:

bool Matcher::narrow_oop_use_complex_address() {
  return Universe::narrow_oop_shift() == 0;
}


I am not sure why that is how it is defined but I am pretty sure it is
my fault (I think I stole it from ppc.ad when I first created the
AArch64 ad file). Anyway, it's clearly not the right definition.

It looks to me as if the x86_64 version is the right one to use and will
fix the problem Ed is seeing:

bool Matcher::narrow_oop_use_complex_address() {
  assert(UseCompressedOops, "only for compressed oops code");
  return (LogMinObjAlignmentInBytes <= 3);
}

n.b. I believe the definition of narrow_klass_use_complex_address()
which immediately follows (and is currently defined to return false)
also ought to follow x86:

bool Matcher::narrow_klass_use_complex_address() {
assert(UseCompressedOops, "only for compressed oops code");
return (LogKlassAlignmentInBytes <= 3);
}

Switching to those definitions certainly seems to fix the issue Ed was
seeing. When I rerun the test without his patch and with these two
alternative definitions the CmpP to CmpN transform is performed and I
see this code generated:

  . . .
  0x000003ffad1c8c94: ldr       w10, [x1,#12]   ; implicit exception:
dispatches to 0x000003ffad1c8cdc
 ;; B2: #       B5 B3 <- B1  Freq: 0.999999

  0x000003ffad1c8c98: cmp       w10, #0x0
  0x000003ffad1c8c9c: b.ls      0x000003ffad1c8cc0  ;*aaload
                                                ; - Decode::main at 2 (line 3)
  . . .

regards,


Andrew Dinn
-----------
Senior Principal Software Engineer
Red Hat UK Ltd
Registered in UK and Wales under Company Registration No. 3798903
Directors: Michael Cunningham (USA), Matt Parson (USA), Charlie Peters
(USA), Michael O'Neill (Ireland)



More information about the aarch64-port-dev mailing list