<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - target amdgcn-amd-amdhsa: static_cast after atomic update leads to "Cannot select AtomicLoadAdd...""
href="https://bugs.llvm.org/show_bug.cgi?id=50967">50967</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>target amdgcn-amd-amdhsa: static_cast after atomic update leads to "Cannot select AtomicLoadAdd..."
</td>
</tr>
<tr>
<th>Product</th>
<td>clang
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Linux
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>enhancement
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>OpenMP
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedclangbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>gcc.j.kelling@hzdr.de
</td>
</tr>
<tr>
<th>CC</th>
<td>llvm-bugs@lists.llvm.org
</td>
</tr></table>
<p>
<div>
<pre>The following code:
```c++
#include <iostream>
template<class T>
void f()
{
int b = 0;
#pragma omp target map(tofrom: b)
{
#pragma omp teams distribute
for(int i = 0; i < 1; ++i)
{
T a = 0;
#pragma omp parallel num_threads(64)
{
#pragma omp atomic update
a += 1;
}
b = static_cast<int>(a);
}
}
std::cout << b << std::endl;
}
int main()
{
// OK:
f<int>();
f<unsigned int>();
// ICE:
f<char>();
f<short>();
f<long long>();
f<float>();
f<double>();
}
```
Compiled with:
clang++ -fopenmp -fopenmp=libomp -fopenmp-targets=amdgcn-amd-amdhsa
-Xopenmp-target=amdgcn-amd-amdhsa -march=gfx900 anyToInt.cpp
yields ICE:
```
LLVM ERROR: Cannot select: t43: i16,ch = AtomicLoadAdd<(load store monotonic
(s8) on %ir.0)> t44:1, t45, Constant:i16<1>
t45: i64 = bitcast t44
t44: v2i32,ch = load<(dereferenceable load (s64) from %ir.a.addr.ascast)>
t47, t87, undef:i64
t87: i64 = bitcast t86
t86: v2i32 = BUILD_VECTOR t84, t85
t84: i32 = select t55, FrameIndex:i32<2>, t74
t55: i1 = setcc FrameIndex:i32<2>, Constant:i32<-1>, setne:ch
t26: i32 = FrameIndex<2>
t53: i32 = Constant<-1>
t26: i32 = FrameIndex<2>
t74: i32 = extract_vector_elt t73, Constant:i32<0>
t73: v2i32 = bitcast Constant:i64<0>
t52: i64 = Constant<0>
t71: i32 = Constant<0>
t85: i32 = select t55, t59, t76
t55: i1 = setcc FrameIndex:i32<2>, Constant:i32<-1>, setne:ch
t26: i32 = FrameIndex<2>
t53: i32 = Constant<-1>
t59: i32 = shl t57, TargetConstant:i32<16>
t57: i32 = S_GETREG_B32 TargetConstant:i16<30735>
t56: i16 = TargetConstant<30735>
t58: i32 = TargetConstant<16>
t76: i32 = extract_vector_elt t73, Constant:i32<1>
t73: v2i32 = bitcast Constant:i64<0>
t52: i64 = Constant<0>
t72: i32 = Constant<1>
t29: i64 = undef
t42: i16 = Constant<1>
In function: __omp_outlined__.5
PLEASE submit a bug report to <a href="https://bugs.llvm.org/">https://bugs.llvm.org/</a> and include the crash
backtrace.
Stack dump:
0. Program arguments:
/home/kelling/checkout/llvm/llvm-project/install/bin/llc
/tmp/anyToInt-61b537-gfx900-linked-b24860.bc -mtriple=amdgcn-amd-amdhsa
-mcpu=gfx900 -filetype=obj -o /tmp/anyToInt-61b537-gfx900-0255a6.o
1. Running pass 'CallGraph Pass Manager' on module
'/tmp/anyToInt-61b537-gfx900-linked-b24860.bc'.
2. Running pass 'AMDGPU DAG->DAG Pattern Instruction Selection' on
function '@__omp_outlined__.5'
#0 0x00005561bebe8e4f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x00005561bebe669d SignalHandler(int) Signals.cpp:0:0
#2 0x00007efe3bce4980 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
#3 0x00007efe3a995fb7 raise (/lib/x86_64-linux-gnu/libc.so.6+0x3efb7)
#4 0x00007efe3a997921 abort (/lib/x86_64-linux-gnu/libc.so.6+0x40921)
#5 0x00005561beb43616 llvm::report_fatal_error(llvm::Twine const&, bool)
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x1d20616)
#6 0x00005561beb4377e
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x1d2077e)
#7 0x00005561bea0a6ef llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*)
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x1be76ef)
#8 0x00005561bea0e622 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*,
unsigned char const*, unsigned int)
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x1beb622)
#9 0x00005561bd9f8c30 (anonymous
namespace)::AMDGPUDAGToDAGISel::Select(llvm::SDNode*)
AMDGPUISelDAGToDAG.cpp:0:0
#10 0x00005561bea0c0fa llvm::SelectionDAGISel::DoInstructionSelection()
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x1be90fa)
#11 0x00005561bea14f2e llvm::SelectionDAGISel::CodeGenAndEmitDAG()
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x1bf1f2e)
#12 0x00005561bea18573
llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&)
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x1bf5573)
#13 0x00005561bea1a2ab
llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&)
(.part.958) SelectionDAGISel.cpp:0:0
#14 0x00005561bd9ff9ca (anonymous
namespace)::AMDGPUDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&)
AMDGPUISelDAGToDAG.cpp:0:0
#15 0x00005561bdfc8a26
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x11a5a26)
#16 0x00005561be4483f6 llvm::FPPassManager::runOnFunction(llvm::Function&)
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x16253f6)
#17 0x00005561bdb87554 (anonymous
namespace)::CGPassManager::runOnModule(llvm::Module&) CallGraphSCCPass.cpp:0:0
#18 0x00005561be449560 llvm::legacy::PassManagerImpl::run(llvm::Module&)
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x1626560)
#19 0x00005561bd4bcda4 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#20 0x00005561bd43b756 main
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x618756)
#21 0x00007efe3a978bf7 __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x21bf7)
#22 0x00005561bd4b42ba _start
(/home/kelling/checkout/llvm/llvm-project/install/bin/llc+0x6912ba)
clang-13: error: unable to execute command: Aborted (core dumped)
clang-13: error: amdgcn-link command failed due to signal (use -v to see
invocation)
clang version 13.0.0 (<a href="https://github.com/llvm/llvm-project.git">https://github.com/llvm/llvm-project.git</a>
51b4ab26ca583b8d313da7663478392196ae6b6a)
Target: x86_64-unknown-linux-gnu
Thread model: posix
```
For any f<Type> where the cast form Type to int is not a bit-copy.</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>