steven_wu added a comment.

More background here that doesn't fit in the commit message.

The tweak for cl mode is intended for r262420. I don't see any test breakage on 
my machine without that hack but I leave it in there just in case.

A little reasoning behind clang driver for CUDA. This is what I see now with 
clang (trunk):
$ clang -x cuda test.cu -ccc-print-bindings

1. "nvptx64-nvidia-cuda" - "clang", inputs: ["test.cu"], output: 
"/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-fbc2e7.s"
2. "nvptx64-nvidia-cuda" - "NVPTX::Assembler", inputs: 
["/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-fbc2e7.s"], output: 
"/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-beca72.o"
3. "nvptx64-nvidia-cuda" - "NVPTX::Linker", inputs: 
["/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-beca72.o", 
"/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-fbc2e7.s"], output: 
"/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-c3378c.fatbin"
4. "x86_64-apple-darwin17.2.0" - "clang", inputs: ["test.cu", 
"/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-c3378c.fatbin"], output: 
"/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-193005.o"
5. "x86_64-apple-darwin17.2.0" - "darwin::Linker", inputs: 
["/var/folders/cg/pyj86ks15y74w3hkwhm_zltm0000gp/T/test-193005.o"], output: 
"a.out"

Note the host clang side has the inputs "test.cu" and "test-c3378c.fatbin". 
Which means if the device side compilation failed, the host side will not 
compile because InputOk will return false in this case. Same applies even if 
there are multiple CUDA inputs on the command line. clang will compile all the 
inputs even the first compilation failed but clang will not compile for host 
when device compilation failed for that input file. This is a better behavior 
than the current implementation.

I don't know what is the best way to write test cases for CUDA driver. If 
anyone can suggest the best way to write them, I will happily add them to the 
commit.
This is the behavior after the patch:
$ echo "invalid" > test.cu
$ clang -x cuda test.cu -nocudalib -nocudainc
test.cu:1:1: error: unknown type name 'invalid'
invalid
^
test.cu:1:8: error: expected unqualified-id
invalid

  ^

$ clang -x cuda test.cu test.cu -nocudalib -nocudainc

1. Same error as above, twice, once for each input file.


https://reviews.llvm.org/D39502



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to