[llvm-bugs] [Bug 37483] New: clang++ CUDA miscompile with -O1

via llvm-bugs llvm-bugs at lists.llvm.org
Wed May 16 04:59:10 PDT 2018


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

            Bug ID: 37483
           Summary: clang++ CUDA miscompile with -O1
           Product: new-bugs
           Version: 6.0
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: new bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: wangxy381 at buaa.edu.cn
                CC: llvm-bugs at lists.llvm.org

Created attachment 20309
  --> https://bugs.llvm.org/attachment.cgi?id=20309&action=edit
test case that trigger the bug

I have encountered a miscompile for cuda program with clang 6.0 , with
optimization '-O1'and disappear with '-O2' and '-O3'.
I have reduced the test-case appended below,

****************************demo.cu********************************
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "cuda.h"

#include <stdio.h>

struct S1 {
    long shoud_not_change;
    long irrelevant;
};

__device__ int * func_3(int ** p_221, struct S1 * ptr_arg)
{
    long *l_302 = &ptr_arg->irrelevant;
    (*l_302) = 0;
    return *p_221;
}

__device__ void func_2(struct S1 * ptr_arg)
{
    int *l_231 = (int*)0;
    func_3(&l_231, ptr_arg);
}


__device__ void func_1(struct S1 * ptr_arg)
{
    func_2(ptr_arg);
}

extern "C" __global__ void entry(long *result)
{
    struct S1 c_783 = {
        11L, // shoud_not_change  
        0L, // irrelevant
    };
    result[0] = (long)c_783.shoud_not_change;
    struct S1* ptr_arg = &c_783;
    __syncthreads();
    func_1(ptr_arg);
    __syncthreads();
    result[1] = (long)ptr_arg->shoud_not_change;
}
int main(void)
{
    long h_result[2];
    long* result;
    size_t result_size = sizeof(long)*2;
    cudaMalloc((void**)&result,result_size);
    entry<<<100,100>>>(result);
    cudaMemcpy(&h_result,result,result_size,cudaMemcpyDeviceToHost);
    printf("result[0] is %ld, result[1] is %ld\n", h_result[0], h_result[1]);

}
------------------------------------------------------------------------------
The failing and passing behaviors are:
-----------------------------------------------------------------------------
FAIL
$clang++ demo.cu -O1 -o bug --cuda-gpu-arch=sm_50 
--cuda-path=/usr/local/cuda-8.0 
-I/usr/local/cuda-8.0/targets/x86_64-linux/include/  -L/usr/local/cuda/lib64
-lcudart -lcuda

$./bug

output:        result[0] is 11, result[1] is 0
-----------------------------------------------------------------------------
PASS
$clang++ demo.cu -O2 -o bugfree-O2 --cuda-gpu-arch=sm_50 
--cuda-path=/usr/local/cuda-8.0 
-I/usr/local/cuda-8.0/targets/x86_64-linux/include/  -L/usr/local/cuda/lib64
-lcudart -lcuda

$./bugfree-O2

output:        result[0] is 11, result[1] is 11
-------------------------------------------------------------------------------
PASS
$clang++ demo.cu -O3 -o bugfree-O3 --cuda-gpu-arch=sm_50 
--cuda-path=/usr/local/cuda-8.0 
-I/usr/local/cuda-8.0/targets/x86_64-linux/include/  -L/usr/local/cuda/lib64
-lcudart -lcuda

$./bugfree-O3

output:        result[0] is 11, result[1] is 11
------------------------------------------------------------------------------



Configuration->
------------------------------------------------------------------------------
#uname -a
Linux G1024-workstation1 4.4.0-121-generic #145-Ubuntu SMP Fri Apr 13 13:47:23
UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
------------------------------------------------------------------------------
$ clang++ --version
clang version 6.0.0 (tags/RELEASE_600/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
-------------------------------------------------------------------------------
cat /etc/*release*/
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
NAME="Ubuntu"
VERSION="16.04.2 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.2 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
Device: NVIDIA Quadro K2200
-------------------------------------------------------------------------------
#nvidia-smi
Wed May 16 15:07:23 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K2200        Off  | 00000000:03:00.0 Off |                  N/A |
| 42%   52C    P0     2W /  39W |      0MiB /  4040MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

CUDA toolkit version:release 8.0, V8.0.61
------------------------------------------------------------------------------

-- 
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/20180516/f73e157e/attachment-0001.html>


More information about the llvm-bugs mailing list