| Issue |
114817
|
| Summary |
AMDGPU global-isel unsupported G_PHI
|
| Labels |
backend:AMDGPU,
llvm:globalisel
|
| Assignees |
tpopp
|
| Reporter |
tpopp
|
It's unclear to me at this time if instruction selection is actually the problem or the previous steps are miscompiling.
Command: `llc -global-isel reduced.ll`
Input:
```
target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-p9:192:256:256:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8:9"
target triple = "amdgcn-amd-amdhsa"
define amdgpu_kernel void @_dynamic_unpack_simple_dispatch_0_unpack_i32(i64 %0, i1 %min.iters.check) {
.preheader:
br i1 %min.iters.check, label %vector.ph, label %Flow97
vector.ph: ; preds = %.preheader
%cmp.n = icmp sgt i64 %0, 0
br label %Flow97
Flow97: ; preds = %vector.ph, %.preheader
%1 = phi i1 [ %cmp.n, %vector.ph ], [ false, %.preheader ]
br i1 %1, label %scalar.ph.preheader, label %Flow98
scalar.ph.preheader: ; preds = %Flow97
ret void
Flow98: ; preds = %Flow97
ret void
}
```
```
# *** IR Dump Before InstructionSelect (instruction-select) ***: # Machine code for function _dynamic_unpack_simple_dispatch_0_unpack_i32: IsSSA, TracksLiveness, Legalized, RegBankSelected
Function Live Ins: $sgpr0_sgpr1_sgpr2_sgpr3 in %2, $sgpr4_sgpr5 in %3, $sgpr6_sgpr7 in %4, $sgpr8_sgpr9 in %5, $vgpr0 in %6, $vgpr1 in %7, $vgpr2 in %8, $sgpr10 in %9, $sgpr11 in %10, $sgpr12 in %11, $sgpr13 in %12
bb.1..preheader:
successors: %bb.2(0x40000000), %bb.3(0x40000000); %bb.2(50.00%), %bb.3(50.00%)
liveins: $sgpr6_sgpr7
%4:sgpr(p4) = COPY $sgpr6_sgpr7
%14:sgpr(s64) = G_CONSTANT i64 8
%15:sgpr(p4) = nuw G_PTR_ADD %4:sgpr, %14:sgpr(s64)
%16:sgpr(s32) = G_LOAD %15:sgpr(p4) :: (dereferenceable invariant load (s32) from %ir.min.iters.check.kernarg.offset.align.down, align 8, addrspace 4)
%17:sgpr(s1) = G_TRUNC %16:sgpr(s32)
%28:sgpr(s32) = G_CONSTANT i32 1
%23:sgpr(s1) = G_TRUNC %28:sgpr(s32)
%29:sgpr(s32) = G_ANYEXT %17:sgpr(s1)
%30:sgpr(s32) = G_ANYEXT %23:sgpr(s1)
%31:sgpr(s32) = G_XOR %29:sgpr, %30:sgpr
%24:sgpr(s1) = G_TRUNC %31:sgpr(s32)
%32:sgpr(s32) = G_CONSTANT i32 0
%22:sgpr(s1) = G_TRUNC %32:sgpr(s32)
%33:sgpr(s32) = G_ZEXT %24:sgpr(s1)
%36:vcc(s1) = COPY %22:sgpr(s1)
G_BRCOND %33:sgpr(s32), %bb.3
G_BR %bb.2
bb.2.vector.ph:
; predecessors: %bb.1
successors: %bb.3(0x80000000); %bb.3(100.00%)
%18:sgpr(s64) = G_LOAD %4:sgpr(p4) :: (dereferenceable invariant load (s64) from %ir..kernarg.offset1, align 16, addrspace 4)
%27:sgpr(s64) = G_CONSTANT i64 0
%34:vgpr(s64) = COPY %18:sgpr(s64)
%35:vgpr(s64) = COPY %27:sgpr(s64)
%20:vcc(s1) = G_ICMP intpred(sgt), %34:vgpr(s64), %35:vgpr
bb.3.Flow97:
; predecessors: %bb.1, %bb.2
successors: %bb.4(0x40000000), %bb.5(0x40000000); %bb.4(50.00%), %bb.5(50.00%)
%21:vcc(s1) = G_PHI %36:vcc(s1), %bb.1, %20:vcc(s1), %bb.2
%37:sgpr(s32) = G_CONSTANT i32 1
%25:sgpr(s1) = G_TRUNC %37:sgpr(s32)
%38:vcc(s1) = COPY %25:sgpr(s1)
%26:vcc(s1) = G_XOR %21:vcc, %38:vcc
G_BRCOND %26:vcc(s1), %bb.5
G_BR %bb.4
bb.4.scalar.ph.preheader:
; predecessors: %bb.3
S_ENDPGM 0
bb.5.Flow98:
; predecessors: %bb.3
S_ENDPGM 0
# End machine code for function _dynamic_unpack_simple_dispatch_0_unpack_i32.
LLVM ERROR: cannot select: %21:sreg_64_xexec(s1) = G_PHI %36:vcc(s1), %bb.1, %20:vcc(s1), %bb.2 (in function: _dynamic_unpack_simple_dispatch_0_unpack_i32)
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /home/tpopp/gisel/iree-build/llvm-project/bin/llc -global-isel reduced.ll
1. Running pass 'CallGraph Pass Manager' on module 'reduced.ll'.
2. Running pass 'InstructionSelect' on function '@_dynamic_unpack_simple_dispatch_0_unpack_i32'
#0 0x000065189d510d87 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:13
#1 0x000065189d50efc0 llvm::sys::RunSignalHandlers() /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/Support/Signals.cpp:106:18
#2 0x000065189d51144a SignalHandler(int) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
#3 0x0000722d07842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x0000722d078969fc __pthread_kill_implementation ./nptl/./nptl/pthread_kill.c:44:76
#5 0x0000722d078969fc __pthread_kill_internal ./nptl/./nptl/pthread_kill.c:78:10
#6 0x0000722d078969fc pthread_kill ./nptl/./nptl/pthread_kill.c:89:10
#7 0x0000722d07842476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x0000722d078287f3 abort ./stdlib/./stdlib/abort.c:81:7
#9 0x000065189d4857b3 llvm::report_fatal_error(llvm::Twine const&, bool) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/Support/ErrorHandling.cpp:126:5
#10 0x000065189d9bb6e4 (/home/tpopp/gisel/iree-build/llvm-project/bin/llc+0x604b6e4)
#11 0x000065189d9bb9c8 llvm::DiagnosticInfoOptimizationBase::~DiagnosticInfoOptimizationBase() /home/tpopp/gisel/iree/third_party/llvm-project/llvm/include/llvm/IR/DiagnosticInfo.h:414:7
#12 0x000065189d9bb9c8 llvm::reportGISelFailure(llvm::MachineFunction&, llvm::TargetPassConfig const&, llvm::MachineOptimizationRemarkEmitter&, char const*, llvm::StringRef, llvm::MachineInstr const&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/CodeGen/GlobalISel/Utils.cpp:277:1
#13 0x000065189d94e16b llvm::InstructionSelect::selectMachineFunction(llvm::MachineFunction&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp:0:11
#14 0x000065189d94d99b llvm::InstructionSelect::runOnMachineFunction(llvm::MachineFunction&)::$_0::operator()() const /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp:146:59
#15 0x000065189d94d99b llvm::detail::scope_exit<llvm::InstructionSelect::runOnMachineFunction(llvm::MachineFunction&)::$_0>::~scope_exit() /home/tpopp/gisel/iree/third_party/llvm-project/llvm/include/llvm/ADT/ScopeExit.h:46:7
#16 0x000065189d94d99b llvm::InstructionSelect::runOnMachineFunction(llvm::MachineFunction&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp:158:1
#17 0x000065189c7464c4 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:0:13
#18 0x000065189cbc3875 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:0:27
#19 0x000065189c2ba43c (anonymous namespace)::CGPassManager::RunPassOnSCC(llvm::Pass*, llvm::CallGraphSCC&, llvm::CallGraph&, bool&, bool&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/Analysis/CallGraphSCCPass.cpp:180:25
#20 0x000065189c2ba43c (anonymous namespace)::CGPassManager::RunAllPassesOnSCC(llvm::CallGraphSCC&, llvm::CallGraph&, bool&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/Analysis/CallGraphSCCPass.cpp:469:9
#21 0x000065189c2ba43c (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/Analysis/CallGraphSCCPass.cpp:534:18
#22 0x000065189cbc4002 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:0:27
#23 0x000065189b2ab5e3 compileModule(char**, llvm::LLVMContext&) /home/tpopp/gisel/iree/third_party/llvm-project/llvm/tools/llc/llc.cpp:755:17
#24 0x000065189b2ab5e3 main /home/tpopp/gisel/iree/third_party/llvm-project/llvm/tools/llc/llc.cpp:412:22
#25 0x0000722d07829d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#26 0x0000722d07829e40 call_init ./csu/../csu/libc-start.c:128:20
#27 0x0000722d07829e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#28 0x000065189b2a8d25 _start (/home/tpopp/gisel/iree-build/llvm-project/bin/llc+0x3938d25)
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs