TableGen GlobalISelEmitter unable to handle trivial pattern

Hi,

I’m looking at some patterns which failed to import, and when I reduced them I was surprised to find a variety of complicated patterns successfully import, but the most trivial patterns I can come up with fail. If I add this pattern to test/TableGen/GlobalISelEmitter.td:

def : Pat <
  (mul i32:$y, i32:$x),
  (MUL $x, $y)

;

test/TableGen/GlobalISelEmitter.td:1196:1: warning: Skipped pattern: Dst pattern child is an unsupported kind
def : Pat <

What am I missing?

-Matt

+Daniel

Hi,

I’m looking at some patterns which failed to import, and when I reduced them I was surprised to find a variety of complicated patterns successfully import, but the most trivial patterns I can come up with fail. If I add this pattern to test/TableGen/GlobalISelEmitter.td:

def : Pat <
  (mul i32:$y, i32:$x),
  (MUL $x, $y)

;

test/TableGen/GlobalISelEmitter.td:1196:1: warning: Skipped pattern: Dst pattern child is an unsupported kind
def : Pat <

What am I missing?

I believe that the importer requires that you use register classes instead of types
for the operands.

-Tom

Hi,

I’m looking at some patterns which failed to import, and when I reduced them I was surprised to find a variety of complicated patterns successfully import, but the most trivial patterns I can come up with fail. If I add this pattern to test/TableGen/GlobalISelEmitter.td:

def : Pat <
(mul i32:$y, i32:$x),
(MUL $x, $y)

;

test/TableGen/GlobalISelEmitter.td:1196:1: warning: Skipped pattern: Dst pattern child is an unsupported kind
def : Pat <

What am I missing?

I believe that the importer requires that you use register classes instead of types
for the operands.

-Tom

That's right. It needs to figure out which register bank to check for in the matcher and it can infer this from the register classes but there isn't enough information if it's only given the type.