[llvm-bugs] [Bug 44390] New: Incorrect OpenMP target offload code at > -O0 optimization

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Dec 27 13:01:44 PST 2019


https://bugs.llvm.org/show_bug.cgi?id=44390

            Bug ID: 44390
           Summary: Incorrect OpenMP target offload code at > -O0
                    optimization
           Product: OpenMP
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Clang Compiler Support
          Assignee: unassignedclangbugs at nondot.org
          Reporter: csdaley at lbl.gov
                CC: llvm-bugs at lists.llvm.org

Created attachment 22968
  --> https://bugs.llvm.org/attachment.cgi?id=22968&action=edit
Source file, bitcode files and PTX files.

I have ported an application named HPGMG from CUDA to OpenMP target offload. I
have found that there are 4 functions containing OpenMP target offload which
give incorrect floating point results (outside of expected floating point
discrepancies) when using LLVM/Clang. The floating point results are only
expected when compiling with -O0 optimization. The host versions of the
functions are correct at -O1, -O2 and -O3 optimization levels (tested by
setting OMP_TARGET_OFFLOAD=disabled).

I have managed to isolate 1 expression in 1 of the 4 functions which produces
incorrect floating point results when using LLVM/Clang. I have placed this
expression in a function named apply_op_fn() in a separate file named
smooth-debug-apply-op-ijk.c. I only need to compile this one file at -O0
optimization to give the correct results for this function. It seems that
LLVM/Clang is generating incorrect PTX for the function apply_op_fn(). I
believe it is this step because I only need to use -O0 optimization for the
LLVM bitcode to PTX compilation step to get the correct results.

I have attached a tarball containing the source file and the LLVM bitcode files
and PTX files at -O0 and -O1 optimization levels. Results are correct when
using -O0 and incorrect when using -O1. My test platform consists of Intel
Skylake CPUs and NVIDIA V100 GPUs. I have tested two versions of LLVM/Clang:
master branch from 23 December 2019 and 28 August 2019. Both have the same
issue. I have also tested the IBM XLC compiler. The IBM XLC compiler gives
expected results when compiling with either -O0 or -Ofast optimization levels.

I appreciate any help here. My expectation is that all 4 functions are affected
by the same compiler issue.
Thanks,
Chris

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20191227/e39cb9c5/attachment.html>


More information about the llvm-bugs mailing list