================
@@ -0,0 +1,40 @@
+; RUN: opt -S -dxil-op-lower -mtriple=dxil-pc-shadermodel6.3-library %s | 
FileCheck %s
+
+; CHECK: %dx.types.i32c = type { i32, i1 }
----------------
Icohedron wrote:

Perhaps I made the incorrect assumption that UAddc only accepts scalars. In the 
current implementation, UAddc is only used with scalar i32 arguments because 
the codegen for AddUint64 only uses the scalar version of the 
uadd_with_overflow llvm intrinsic. 

The only case where the resulting front-end IR, DXIL, and SPIR-V will differ 
from the current implementation is when `AddUint64` receives `uint4` arguments.

With the current version of the PR, I can do a successful end-to-end 
compilation of of the [`AddUint64.hlsl` 
test](https://github.com/llvm/llvm-project/blob/55f764e23e8b14328192ed05b3d8429f70b22277/clang/test/CodeGenHLSL/builtins/AddUint64.hlsl)
 (which uses uint2 and uint4 vectors) using the command:
`build/bin/clang -cc1 -finclude-default-header -triple 
dxil-pc-shadermodel6.3-library clang/test/CodeGenHLSL/builtins/AddUint64.hlsl 
-emit-llvm -o - | build/bin/opt -S -scalarizer -dxil-op-lower 
-mtriple=dxil-pc-shadermodel6.3-library -o -`.
This works because the vector is already scalarized in the clang/front-end 
codegen.

I will work on reimplementing AddUint64 for the uint4 case by using vectors, 
and make UAddc scalarizable.


https://github.com/llvm/llvm-project/pull/125319
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to