[PATCH] D111497: m68k: Support bit shifts on 64-bit integers
Ricky Taylor via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 21 16:21:07 PDT 2021
ricky26 added a comment.
@AnnikaCodes, I'm seeing test failures from this patch. It looks like it's generating SETCC nodes which don't return i8 (which the M68k requires).
FAIL: LLVM :: CodeGen/M68k/Arith/bitwise.ll (315 of 45926)
******************** TEST 'LLVM :: CodeGen/M68k/Arith/bitwise.ll' FAILED ********************
Script:
--
: 'RUN: at line 2'; /home/ricky26/Projects/OSS/m68k/llvm/build-relwithdebinfo/bin/llc < /home/ricky26/Projects/OSS/m68k/llvm/llvm/test/CodeGen/M68k/Arith/bitwise.ll -mtriple=m68k-linux -verify-machineinstrs | /home/ricky26/Projects/OSS/m68k/llvm/build-relwithdebinfo/bin/FileCheck /home/ricky26/Projects/OSS/m68k/llvm/llvm/test/CodeGen/M68k/Arith/bitwise.ll
--
Exit Code: 1
Command Output (stderr):
--
llc: /home/ricky26/Projects/OSS/m68k/llvm/llvm/lib/Target/M68k/M68kISelLowering.cpp:1914: llvm::SDValue llvm::M68kTargetLowering::LowerSETCC(llvm::SDValue, llvm::SelectionDAG&) const: Assertion `VT == MVT::i8 && "SetCC type must be 8-bit integer"' failed.
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: /home/ricky26/Projects/OSS/m68k/llvm/build-relwithdebinfo/bin/llc -mtriple=m68k-linux -verify-machineinstrs
1. Running pass 'Function Pass Manager' on module '<stdin>'.
2. Running pass 'M68k DAG->DAG Pattern Instruction Selection' on function '@lshr64'
-snip-
#8 0x0000557b6ce29aee llvm::M68kTargetLowering::LowerSETCC(llvm::SDValue, llvm::SelectionDAG&) const /home/ricky26/Projects/OSS/m68k/llvm/llvm/lib/Target/M68k/M68kISelLowering.cpp:1976:1
#9 0x0000557b6ce2a251 llvm::M68kTargetLowering::LowerSELECT(llvm::SDValue, llvm::SelectionDAG&) const /home/ricky26/Projects/OSS/m68k/llvm/llvm/lib/Target/M68k/M68kISelLowering.cpp:2039:5
#10 0x0000557b6dde95a0 (anonymous namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDNode*) /home/ricky26/Projects/OSS/m68k/llvm/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1281:43
I checked the debug output:
Legalizing: t24: i32,i32 = srl_parts t5, t3, t9
Trying custom legalization
Creating constant: t25: i32 = Constant<0>
Creating constant: t26: i32 = Constant<1>
Creating constant: t27: i32 = Constant<-32>
Creating constant: t28: i32 = Constant<31>
Creating new node: t29: i32 = add t9, Constant:i32<-32>
Creating new node: t30: i32 = sub Constant:i32<31>, t9
Creating new node: t31: i32 = srl t5, t9
Creating new node: t32: i32 = shl t3, Constant:i32<1>
Creating new node: t33: i32 = shl t32, t30
Creating new node: t34: i32 = or t31, t33
Creating new node: t35: i32 = srl t3, t9
Creating new node: t36: i32 = srl t3, t29
Creating new node: t38: i32 = setcc t29, Constant:i32<0>, setlt:ch
Creating new node: t39: i32 = select t38, t34, t36
Creating new node: t40: i32 = select t38, t35, Constant:i32<0>
Creating new node: t41: i32,i32 = merge_values t39, t40
Successfully custom legalized node
... replacing: t24: i32,i32 = srl_parts t5, t3, t9
with: t41: i32,i32 = merge_values t39, t40
and: t41: i32,i32 = merge_values t39, t40
If I understand correctly, I think the only issue is that `t38` returns `i32` instead of `i8`.
It might be as simple as making it so that the `getSetCC` calls use `MVT::i8` instead of the input `VT`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D111497/new/
https://reviews.llvm.org/D111497
More information about the llvm-commits
mailing list