<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62603>62603</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
GlobalISel combiner emitter fails on assert(Leaf.isFullyTraversed())
</td>
</tr>
<tr>
<th>Labels</th>
<td>
tablegen,
globalisel
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
arsenm
</td>
</tr>
</table>
<pre>
This attempt at a pattern produces some errors and then asserts
```
def expand_promoted_fmed3_matchdata : GIDefMatchData<"std::array<Register, 3>">;
def expand_promoted_fmed3 : GICombineRule<
(defs root:$fptrunc, expand_promoted_fmed3_matchdata:$matchinfo),
(match (G_FPTRUNC $fptrunc, $fmed3):$fptrunc, (G_AMDGPU_FMED3 $src0, $src1, $src2):$fmed3,
[{ return Helper.matchExpandPromotedF16FMed3(*${fptrunc}, ${matchinfo}); }]),
(apply [{ Helper.applyExpandPromotedF16FMed3(*${fptrunc}, ${matchinfo}); }])
>;
```
[3/10] Building AMDGPUGenPostLegalizeGICombiner.inc...
FAILED: lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc /Users/matt/src/llvm-project/build_debug/lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc
cd /Users/matt/src/llvm-project/build_debug && /Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen -gen-global-isel-combiner -combiners="AMDGPUPostLegalizerCombinerHelper" -I /Users/matt/src/llvm-project/llvm/lib/Target/AMDGPU -I/Users/matt/src/llvm-project/build_debug/include -I/Users/matt/src/llvm-project/llvm/include -I /Users/matt/src/llvm-project/llvm/lib/Target /Users/matt/src/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUGISel.td --write-if-changed -o lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc -d lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc.d
error: Leaf expand_promoted_fmed3 is unreachable
note: Leaf constant_fp_op will have already matched
error: Leaf expand_promoted_fmed3 is not fully traversed
note: This indicates a missing partitioner within tblgen
Leaf expand_promoted_fmed3 for root #0
matchdag {
(G_FPTRUNC 0:dst<def>, 1:src):$fptrunc // $fptrunc=getOperand(0), $fmed3=getOperand(1)
(G_AMDGPU_FMED3 0:dst<def>, 1:src0, 2:src1, 3:src2):$fmed3 // $src0=getOperand(0), $src1=getOperand(1), $src2=getOperand(2)
<<$mi.getOpcode() == G_FPTRUNC>>:$__anonpred111_0
<<$mi.getOpcode() == G_AMDGPU_FMED3>>:$__anonpred111_1
fptrunc ==> __anonpred111_0[mi]
fmed3 ==> __anonpred111_1[mi]
}
Declared Instr #0
1 untested instrs of 2
0 untested edges of 0
1 untested predicates of 2
0 edges could be traversed
0 predicates could be tested
note: Instr (G_AMDGPU_FMED3 0:dst<def>, 1:src0, 2:src1, 3:src2):$fmed3 // $src0=getOperand(0), $src1=getOperand(1), $src2=getOperand(2)
Included from /Users/matt/src/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUGISel.td:14:
/Users/matt/src/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUCombine.td:120:5: error: Unable to test predicate used in rule
def expand_promoted_fmed3 : GICombineRule<
^
<unknown>:0: note: This indicates an incomplete implementation in tablegen
<<$mi.getOpcode() == G_AMDGPU_FMED3>>:$__anonpred111_1
Assertion failed: (Leaf.isFullyTraversed()), function generateCodeForTree, file GICombinerEmitter.cpp, line 852.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen -gen-global-isel-combiner -combiners=AMDGPUPostLegalizerCombinerHelper -I /Users/matt/src/llvm-project/llvm/lib/Target/AMDGPU -I/Users/matt/src/llvm-project/build_debug/include -I/Users/matt/src/llvm-project/llvm/include -I /Users/matt/src/llvm-project/llvm/lib/Target /Users/matt/src/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUGISel.td --write-if-changed -o lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc -d lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc.d
#0 0x00000001005e0f4d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1005e0f4d)
#1 0x00000001005e148b PrintStackTraceSignalHandler(void*) (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1005e148b)
#2 0x00000001005df096 llvm::sys::RunSignalHandlers() (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1005df096)
#3 0x00000001005e1eef SignalHandler(int) (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1005e1eef)
#4 0x00007ff8012a05ed (/usr/lib/system/libsystem_platform.dylib+0x7ff8004255ed)
#5 0x0000000000000003 (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x3)
#6 0x00007ff801199b45 (/usr/lib/system/libsystem_c.dylib+0x7ff80031eb45)
#7 0x00007ff801198e5e (/usr/lib/system/libsystem_c.dylib+0x7ff80031de5e)
#8 0x00000001002db0a2 (anonymous namespace)::GICombinerEmitter::generateCodeForTree(llvm::raw_ostream&, llvm::GIMatchTree const&, llvm::StringRef) const (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1002db0a2)
#9 0x00000001002d9e5b (anonymous namespace)::GICombinerEmitter::generateCodeForTree(llvm::raw_ostream&, llvm::GIMatchTree const&, llvm::StringRef) const (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1002d9e5b)
#10 0x00000001002d8a32 (anonymous namespace)::GICombinerEmitter::run(llvm::raw_ostream&) (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1002d8a32)
#11 0x00000001002d56cc EmitGICombiner(llvm::RecordKeeper&, llvm::raw_ostream&) (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1002d56cc)
#12 0x00000001005f1ed6 llvm::TableGenMain(char const*, std::__1::function<bool (llvm::raw_ostream&, llvm::RecordKeeper&)>) (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1005f1ed6)
#13 0x00000001004722f1 main (/Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen+0x1004722f1)
#14 0x00007ff800f1941f
/bin/sh: line 1: 42291 Abort trap: 6 /Users/matt/src/llvm-project/build_debug/bin/llvm-tblgen -gen-global-isel-combiner -combiners="AMDGPUPostLegalizerCombinerHelper" -I /Users/matt/src/llvm-project/llvm/lib/Target/AMDGPU -I/Users/matt/src/llvm-project/build_debug/include -I/Users/matt/src/llvm-project/llvm/include -I /Users/matt/src/llvm-project/llvm/lib/Target /Users/matt/src/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUGISel.td --write-if-changed -o lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc -d lib/Target/AMDGPU/AMDGPUGenPostLegalizeGICombiner.inc.d
[4/10] Building AMDGPUGenGlobalISel.inc...
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWVtv2zoS_jX0y8CGREm-PPjB15xg290gTZ8NShzJ3EqkQFJNs79-QUq-yLk0myZncXAaFC4lcma-GX6cISlmjCgk4pwkS5KsB6yxe6XnTBuU1SBV_GF-txcGmLVY1RaYBQa1e9ISaq14k6EBoyoE1FppA0xysHuUwIxBbQ2QYE2CRfc7Drp__pFjDvijZpLvaq0qZZHv8gp5tKuYzfacWQYkWsDV9Rrzz-7VmllGohWh1FhOogWJFkxr9kCi1S0WwljUhK4gItGGUOp-o-U5gGctdnZWqkqFxNumRGfGywAQOuWYG9BKWWeUxnltdSMzZ-snDrTj_aOQuSJ0Rui5Yt_jGle77c3d7dd_rqCv3z05lU7y0rYXW3xeX9183W0_b9aRG210FnSCRmfhqUlPKlqFRxwAbv4nS9BoGy3hDyxr1COPbeP9u-nc24bj7WcvPCXUqSKT5QHQZN3ZIpPlyWH3dkaiJbhWsu4FgNApq-vy4WC-s-vffYDdlgiPSHHByt5vsowI3YYBSdawbETJhSygjfgVyhtl7CcsWCn-g0fy6JGQ2Wg0ajVsF9efNmvHrlKkhG7vmC7QErptlRwbL2oDQrdfDWpD6LZi1okbnRG6Lcvv1bDW6t-YuZepQ7jjmDaF6_wVgx58xt9gGQgdEzp-G-ZUyMMQm5YFShgWKIdFqVJWDoXBcph1OOHYMiRaE0pbv86d0gefWmIRSmF4_Vpg7vG5KMLw-k3uCZmVDcfXi3cgTnK_gP49HD_R5_oLliPLYTi818LiUOTDbM9kgRyG6pfIPuS_Ij7iLXd9PXLr7hOy55K-MNBIjSzbs7TEVk4qi0exTEljmbS7vN6pGu5FWcKefUdgpUbGH8DnG_zfTEplIW_K8gGsZt9Rm4P8wbQvuUJykTGLBhhUwhiXeGqmrbBCOfbfC7sXEtpV0sq_YDZX2pcvIDTq8lxXogogk-VZQTrVoYBEC24siVYcc19RVxCSaOFJ0y9GjlqEbs9LV7Qu0P6rRs0kJ3QatIn_VM4u-sNjgn6iqr2AxJc62rbDrvYvHhe7M4Be6Hl0Xs9T4M7q6EU3PcMerfz-JK7EyI_JFEdftGbgslS0hmOAfSXatCB3OyaVrDXyMAx3wXE-XqPuPFTP6wwPOo9T5uVJtIFL48myEq5ktgKH_dHTo8P-aFdsfWONWck0criWxuoz2oXQSIvGIgfhugyoHGjbF5z6kBfoux6LOdPd0jgXbSUy1ZQcUrxcW8G52GmQ19hffQfAf1kSXrfFgkOuVfUhSZ9EizB2jrVz_o4Wukze2aAu5omblGNq_Spdqgar_NydJhUa4xkFujlk8rdt9t1eeHPYKq4a-U2qe9muKYcGnkvSEoTMVFWXaBGE-79CaZnL1g6WdbCPmfr91_XCH7ecsZyJEl34HIddSRgJs3Xl5u64Iryhjk55IzMvV6BEzSyuFMet0nca0feLEk_B0ptKuNPfKKtr11sKiTBNaLfbvfm0WXzZgGnSSrijotsOaqyVtm7G9tbWxvvglkEh7L5JR5mqzsjRp4wwpkHHK3-sPGyC7B4h08zsIWXZN6tZhp35L5Zl34A3VX0kZzAiwexGq0KzCpguGjcrpo3On7k__enm9PfO9O-yM_XFEIIfQfsXBkGCQR5z8O75Sw3zYNrGjRbSelrfOZ4TOj0N0ux-p4zVyCp_5FqBkNZnELe-34PchC6DH0d85zu0KLxwIIynKVyg_SIKyco_mOSlO3xNvyvB_en9QyA6BD2ItA-R58Fs_FSMbxvZQ2oOifjdMXoIPYzRZRgRc7iM28dNqzPXwxN3eCZ5Pg1CyoIEeWe4Mfq49syDsdgtxba9q0tmc6WrEX_wY5bBD68kiGmSYJ88ycnrw1_0zu5FPYPjnlvhbJbGyevcyh75E4WYxklP_eRC_RQTfLt6jgn21E97JKE8DRj1d2dSyYdKNQYkq9DUPkHMWlI_qtjt6yeL_Is55dR3de3vYJ1MezB-NOKL1UIWt55T7ZD3J23rfi8-s4v4zDBJ_8bxce6frjtpFAYX8Zmy6K380Y18MR4fkKVavD2HwguHknGWgcN5Qt1DeYuZ0vwfiP4S8GJS_hQXHMKeCxfFKQ-RnxenO3dcuEL5mTmd02zP9IFTCwf_-PljtwvbxmEfT6JVqlQJr6bto-DM_OH2I-qN97IXhn79iyeU5iFUTMj3t94q71nvVbsgD2dxmMPxUNtqMvv28l6iP-1DTOkshEXqzzSauZMG_L7s_n2k-L8eKUiyjF_4TnXlGeWdaL9NDfg84rNoxgY4D8fTKImDJJ4M9nPKKGMRRgGdJDHHKeZhGkcxT6ZphhPOBmJOAxoFSTANg2AWTEZjmkXI0ySOEXk-C0gcYMVEOXKRHSldDPwpfj6m4yAalCzF0vjPzZQe70QoJXRFKG2Z74jvXiXrgZ776UqbwpA4KIWx5qTXClvi_OQbHBcLtiXLX4UYUIeP0T-9Dxk0upy__ZbCu_jfAAAA___b2MQN">