[PATCH] D156933: [HLSL] Add reversebits library function

2023-08-02 Thread Xiang Li via Phabricator via cfe-commits
python3kgae accepted this revision.
python3kgae added a comment.
This revision is now accepted and ready to land.

Don't need -fnative-half-type in the RUN line.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D156933/new/

https://reviews.llvm.org/D156933

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


[PATCH] D156933: [HLSL] Add reversebits library function

2023-08-02 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/test/CodeGenHLSL/builtins/bitreverse.hlsl:32
+// CHECK: call <4 x i16> @llvm.bitreverse.v4i16
+// NO_HALF: define noundef <4 x i16> 
@"?test_bitreverse_short4@@YAT?$__vector@F$03@__clang@@T12@@Z"(
+// NO_HALF: call <4 x i16> @llvm.bitreverse.v4i16(

Not NO_HALF, it is integer :).

And __HLSL_ENABLE_16_BIT only defined once.
Maybe just one RUN line is enough.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D156933/new/

https://reviews.llvm.org/D156933

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


[PATCH] D155729: [OptTable] Make explicitly included options override excluded ones

2023-07-19 Thread Xiang Li via Phabricator via cfe-commits
python3kgae accepted this revision.
python3kgae added a comment.
This revision is now accepted and ready to land.

This is much cleaner.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155729/new/

https://reviews.llvm.org/D155729

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


[PATCH] D146897: [clang:diagnostics] Turning off warn_self_assignment_overloaded for user-defined compound assignments

2023-04-07 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 511795.
python3kgae added a comment.

Update the comment done by rjmccall.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146897/new/

https://reviews.llvm.org/D146897

Files:
  clang/lib/Sema/SemaExpr.cpp
  clang/test/SemaCXX/warn-self-assign-overloaded.cpp


Index: clang/test/SemaCXX/warn-self-assign-overloaded.cpp
===
--- clang/test/SemaCXX/warn-self-assign-overloaded.cpp
+++ clang/test/SemaCXX/warn-self-assign-overloaded.cpp
@@ -53,15 +53,15 @@
 
 #ifndef DUMMY
   a *= a;
-  a /= a; // expected-warning {{explicitly assigning}}
-  a %= a; // expected-warning {{explicitly assigning}}
+  a /= a;
+  a %= a;
   a += a;
-  a -= a; // expected-warning {{explicitly assigning}}
+  a -= a;
   a <<= a;
   a >>= a;
-  a &= a; // expected-warning {{explicitly assigning}}
-  a |= a; // expected-warning {{explicitly assigning}}
-  a ^= a; // expected-warning {{explicitly assigning}}
+  a &= a;
+  a |= a;
+  a ^= a;
 #endif
 }
 
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -15657,13 +15657,22 @@
Expr *LHS, Expr *RHS) {
   switch (Opc) {
   case BO_Assign:
+// In the non-overloaded case, we warn about self-assignment (x = x) for
+// both simple assignment and certain compound assignments where algebra
+// tells us the operation yields a constant result.  When the operator is
+// overloaded, we can't do the latter because we don't want to assume that
+// those algebraic identities still apply; for example, a path-building
+// library might use operator/= to append paths.  But it's still reasonable
+// to assume that simple assignment is just moving/copying values around
+// and so self-assignment is likely a bug.
+DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
+[[fallthrough]];
   case BO_DivAssign:
   case BO_RemAssign:
   case BO_SubAssign:
   case BO_AndAssign:
   case BO_OrAssign:
   case BO_XorAssign:
-DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
 CheckIdentityFieldAssignment(LHS, RHS, OpLoc, S);
 break;
   default:


Index: clang/test/SemaCXX/warn-self-assign-overloaded.cpp
===
--- clang/test/SemaCXX/warn-self-assign-overloaded.cpp
+++ clang/test/SemaCXX/warn-self-assign-overloaded.cpp
@@ -53,15 +53,15 @@
 
 #ifndef DUMMY
   a *= a;
-  a /= a; // expected-warning {{explicitly assigning}}
-  a %= a; // expected-warning {{explicitly assigning}}
+  a /= a;
+  a %= a;
   a += a;
-  a -= a; // expected-warning {{explicitly assigning}}
+  a -= a;
   a <<= a;
   a >>= a;
-  a &= a; // expected-warning {{explicitly assigning}}
-  a |= a; // expected-warning {{explicitly assigning}}
-  a ^= a; // expected-warning {{explicitly assigning}}
+  a &= a;
+  a |= a;
+  a ^= a;
 #endif
 }
 
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -15657,13 +15657,22 @@
Expr *LHS, Expr *RHS) {
   switch (Opc) {
   case BO_Assign:
+// In the non-overloaded case, we warn about self-assignment (x = x) for
+// both simple assignment and certain compound assignments where algebra
+// tells us the operation yields a constant result.  When the operator is
+// overloaded, we can't do the latter because we don't want to assume that
+// those algebraic identities still apply; for example, a path-building
+// library might use operator/= to append paths.  But it's still reasonable
+// to assume that simple assignment is just moving/copying values around
+// and so self-assignment is likely a bug.
+DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
+[[fallthrough]];
   case BO_DivAssign:
   case BO_RemAssign:
   case BO_SubAssign:
   case BO_AndAssign:
   case BO_OrAssign:
   case BO_XorAssign:
-DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
 CheckIdentityFieldAssignment(LHS, RHS, OpLoc, S);
 break;
   default:
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D146897: [clang:diagnostics] Turning off warn_self_assignment_overloaded for user-defined compound assignments

2023-04-07 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 511697.
python3kgae added a comment.

Revert change for self-assign-field which deserve its own pull request.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146897/new/

https://reviews.llvm.org/D146897

Files:
  clang/lib/Sema/SemaExpr.cpp
  clang/test/SemaCXX/warn-self-assign-overloaded.cpp


Index: clang/test/SemaCXX/warn-self-assign-overloaded.cpp
===
--- clang/test/SemaCXX/warn-self-assign-overloaded.cpp
+++ clang/test/SemaCXX/warn-self-assign-overloaded.cpp
@@ -53,15 +53,15 @@
 
 #ifndef DUMMY
   a *= a;
-  a /= a; // expected-warning {{explicitly assigning}}
-  a %= a; // expected-warning {{explicitly assigning}}
+  a /= a;
+  a %= a;
   a += a;
-  a -= a; // expected-warning {{explicitly assigning}}
+  a -= a;
   a <<= a;
   a >>= a;
-  a &= a; // expected-warning {{explicitly assigning}}
-  a |= a; // expected-warning {{explicitly assigning}}
-  a ^= a; // expected-warning {{explicitly assigning}}
+  a &= a;
+  a |= a;
+  a ^= a;
 #endif
 }
 
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -15657,13 +15657,15 @@
Expr *LHS, Expr *RHS) {
   switch (Opc) {
   case BO_Assign:
+// Skip diagnose on compound assignment.
+DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
+[[fallthrough]];
   case BO_DivAssign:
   case BO_RemAssign:
   case BO_SubAssign:
   case BO_AndAssign:
   case BO_OrAssign:
   case BO_XorAssign:
-DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
 CheckIdentityFieldAssignment(LHS, RHS, OpLoc, S);
 break;
   default:


Index: clang/test/SemaCXX/warn-self-assign-overloaded.cpp
===
--- clang/test/SemaCXX/warn-self-assign-overloaded.cpp
+++ clang/test/SemaCXX/warn-self-assign-overloaded.cpp
@@ -53,15 +53,15 @@
 
 #ifndef DUMMY
   a *= a;
-  a /= a; // expected-warning {{explicitly assigning}}
-  a %= a; // expected-warning {{explicitly assigning}}
+  a /= a;
+  a %= a;
   a += a;
-  a -= a; // expected-warning {{explicitly assigning}}
+  a -= a;
   a <<= a;
   a >>= a;
-  a &= a; // expected-warning {{explicitly assigning}}
-  a |= a; // expected-warning {{explicitly assigning}}
-  a ^= a; // expected-warning {{explicitly assigning}}
+  a &= a;
+  a |= a;
+  a ^= a;
 #endif
 }
 
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -15657,13 +15657,15 @@
Expr *LHS, Expr *RHS) {
   switch (Opc) {
   case BO_Assign:
+// Skip diagnose on compound assignment.
+DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
+[[fallthrough]];
   case BO_DivAssign:
   case BO_RemAssign:
   case BO_SubAssign:
   case BO_AndAssign:
   case BO_OrAssign:
   case BO_XorAssign:
-DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
 CheckIdentityFieldAssignment(LHS, RHS, OpLoc, S);
 break;
   default:
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D147657: [Sema] Fix reporting of invalid shader attribute on HLSL entry function

2023-04-05 Thread Xiang Li via Phabricator via cfe-commits
python3kgae accepted this revision.
python3kgae added a comment.
This revision is now accepted and ready to land.

Thanks for fix the issue.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147657/new/

https://reviews.llvm.org/D147657

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


[PATCH] D146897: [clang:diagnostics] Turning off warn_self_assignment_overloaded for user-defined compound assignments

2023-04-04 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 510976.
python3kgae added a comment.

skip warning on field for compound assignment when isImplicitCXXThis matches.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146897/new/

https://reviews.llvm.org/D146897

Files:
  clang/lib/Sema/SemaExpr.cpp
  clang/test/SemaCXX/warn-self-assign-field-overloaded.cpp
  clang/test/SemaCXX/warn-self-assign-overloaded.cpp

Index: clang/test/SemaCXX/warn-self-assign-overloaded.cpp
===
--- clang/test/SemaCXX/warn-self-assign-overloaded.cpp
+++ clang/test/SemaCXX/warn-self-assign-overloaded.cpp
@@ -53,15 +53,15 @@
 
 #ifndef DUMMY
   a *= a;
-  a /= a; // expected-warning {{explicitly assigning}}
-  a %= a; // expected-warning {{explicitly assigning}}
+  a /= a;
+  a %= a;
   a += a;
-  a -= a; // expected-warning {{explicitly assigning}}
+  a -= a;
   a <<= a;
   a >>= a;
-  a &= a; // expected-warning {{explicitly assigning}}
-  a |= a; // expected-warning {{explicitly assigning}}
-  a ^= a; // expected-warning {{explicitly assigning}}
+  a &= a;
+  a |= a;
+  a ^= a;
 #endif
 }
 
Index: clang/test/SemaCXX/warn-self-assign-field-overloaded.cpp
===
--- clang/test/SemaCXX/warn-self-assign-field-overloaded.cpp
+++ clang/test/SemaCXX/warn-self-assign-field-overloaded.cpp
@@ -58,15 +58,49 @@
 
 #ifndef DUMMY
 a *= a;
-a /= a; // expected-warning {{assigning field to itself}}
-a %= a; // expected-warning {{assigning field to itself}}
+a /= a;
+a %= a;
 a += a;
-a -= a; // expected-warning {{assigning field to itself}}
+a -= a;
 a <<= a;
 a >>= a;
-a &= a; // expected-warning {{assigning field to itself}}
-a |= a; // expected-warning {{assigning field to itself}}
-a ^= a; // expected-warning {{assigning field to itself}}
+a &= a;
+a |= a;
+a ^= a;
+
+this->a *= a;
+this->a /= a; // expected-warning {{assigning field to itself}}
+this->a %= a; // expected-warning {{assigning field to itself}}
+this->a += a;
+this->a -= a; // expected-warning {{assigning field to itself}}
+this->a <<= a;
+this->a >>= a;
+this->a &= a; // expected-warning {{assigning field to itself}}
+this->a |= a; // expected-warning {{assigning field to itself}}
+this->a ^= a; // expected-warning {{assigning field to itself}}
+
+a *= this->a;
+a /= this->a; // expected-warning {{assigning field to itself}}
+a %= this->a; // expected-warning {{assigning field to itself}}
+a += this->a;
+a -= this->a; // expected-warning {{assigning field to itself}}
+a <<= this->a;
+a >>= this->a;
+a &= this->a; // expected-warning {{assigning field to itself}}
+a |= this->a; // expected-warning {{assigning field to itself}}
+a ^= this->a; // expected-warning {{assigning field to itself}}
+
+this->a *= this->a;
+this->a /= this->a;
+this->a %= this->a;
+this->a += this->a;
+this->a -= this->a;
+this->a <<= this->a;
+this->a >>= this->a;
+this->a &= this->a;
+this->a |= this->a;
+this->a ^= this->a;
+
 #endif
   }
 
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -14099,7 +14099,7 @@
 }
 
 static void CheckIdentityFieldAssignment(Expr *LHSExpr, Expr *RHSExpr,
- SourceLocation Loc,
+ bool IsCompound, SourceLocation Loc,
  Sema ) {
   if (Sema.inTemplateInstantiation())
 return;
@@ -14116,6 +14116,10 @@
   if (ML && MR) {
 if (!(isa(ML->getBase()) && isa(MR->getBase(
   return;
+// For compound case, only warning on this->x -= x or x -= this->x.
+if (IsCompound && ML->getBase()->isImplicitCXXThis() ==
+  MR->getBase()->isImplicitCXXThis())
+  return;
 const ValueDecl *LHSDecl =
 cast(ML->getMemberDecl()->getCanonicalDecl());
 const ValueDecl *RHSDecl =
@@ -14127,7 +14131,7 @@
 if (const ReferenceType *RefTy = LHSDecl->getType()->getAs())
   if (RefTy->getPointeeType().isVolatileQualified())
 return;
-
+
 Sema.Diag(Loc, diag::warn_identity_field_assign) << 0;
   }
 
@@ -14171,7 +14175,8 @@
   if (CompoundType.isNull()) {
 Expr *RHSCheck = RHS.get();
 
-CheckIdentityFieldAssignment(LHSExpr, RHSCheck, Loc, *this);
+CheckIdentityFieldAssignment(LHSExpr, RHSCheck, /*IsCompound*/ false, Loc,
+ *this);
 
 QualType LHSTy(LHSType);
 ConvTy = CheckSingleAssignmentConstraints(LHSTy, RHS);
@@ -15644,14 +15649,17 @@
Expr *LHS, Expr *RHS) {
   switch (Opc) {
   case BO_Assign:
+// Skip diagnose on compound assignment.
+

[PATCH] D146897: [clang:diagnostics] Turning off warn_self_assignment_overloaded for user-defined compound assignments

2023-04-04 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/lib/Sema/SemaExpr.cpp:15656
   case BO_XorAssign:
-DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
 CheckIdentityFieldAssignment(LHS, RHS, OpLoc, S);
 break;

rsmith wrote:
> This is the same thing, but for `this->x += this->x`. I think we should also 
> suppress those warnings for compound assignment, except when one of the 
> operands is an implicit member access and one is an explicit member access 
> (`this->x += x;` should still warn if the latter `x` is also interpreted as 
> `this->x`).
For case like this:

```
class Vector {
public:
Vector& operator+=(const Vector ) { return *this; }
Vector& operator-=(const Vector ) { return *this; }
};

class A {
public:
  A(){}
  Vector x;
  void foo() {
 this->x -= this->x;
 this->x -= x;
 this->x += this->x;
 this->x += x;
  }
};
```
clang will report 2 warning:

```
:14:14: warning: assigning field to itself [-Wself-assign-field]
 this->x -= this->x;
 ^
:15:14: warning: assigning field to itself [-Wself-assign-field]
 this->x -= x;
```

Do you mean we should make it report warning on this->x -= x; and this->x += x; 
?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146897/new/

https://reviews.llvm.org/D146897

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


[PATCH] D146897: [clang:diagnostics] Turning off warn_self_assignment_overloaded for user-defined compound assignments

2023-03-25 Thread Xiang Li via Phabricator via cfe-commits
python3kgae created this revision.
python3kgae added reviewers: rjmccall, Quuxplusone, riccibruno.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Fixes 42469 https://github.com/llvm/llvm-project/issues/42469

Only check self assignment on BO_Assign when BuildOverloadedBinOp.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D146897

Files:
  clang/lib/Sema/SemaExpr.cpp
  clang/test/SemaCXX/warn-self-assign-overloaded.cpp


Index: clang/test/SemaCXX/warn-self-assign-overloaded.cpp
===
--- clang/test/SemaCXX/warn-self-assign-overloaded.cpp
+++ clang/test/SemaCXX/warn-self-assign-overloaded.cpp
@@ -53,15 +53,15 @@
 
 #ifndef DUMMY
   a *= a;
-  a /= a; // expected-warning {{explicitly assigning}}
-  a %= a; // expected-warning {{explicitly assigning}}
+  a /= a;
+  a %= a;
   a += a;
-  a -= a; // expected-warning {{explicitly assigning}}
+  a -= a;
   a <<= a;
   a >>= a;
-  a &= a; // expected-warning {{explicitly assigning}}
-  a |= a; // expected-warning {{explicitly assigning}}
-  a ^= a; // expected-warning {{explicitly assigning}}
+  a &= a;
+  a |= a;
+  a ^= a;
 #endif
 }
 
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -15644,13 +15644,15 @@
Expr *LHS, Expr *RHS) {
   switch (Opc) {
   case BO_Assign:
+// Skip diagnose on compound assignment.
+DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
+[[fallthrough]];
   case BO_DivAssign:
   case BO_RemAssign:
   case BO_SubAssign:
   case BO_AndAssign:
   case BO_OrAssign:
   case BO_XorAssign:
-DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
 CheckIdentityFieldAssignment(LHS, RHS, OpLoc, S);
 break;
   default:


Index: clang/test/SemaCXX/warn-self-assign-overloaded.cpp
===
--- clang/test/SemaCXX/warn-self-assign-overloaded.cpp
+++ clang/test/SemaCXX/warn-self-assign-overloaded.cpp
@@ -53,15 +53,15 @@
 
 #ifndef DUMMY
   a *= a;
-  a /= a; // expected-warning {{explicitly assigning}}
-  a %= a; // expected-warning {{explicitly assigning}}
+  a /= a;
+  a %= a;
   a += a;
-  a -= a; // expected-warning {{explicitly assigning}}
+  a -= a;
   a <<= a;
   a >>= a;
-  a &= a; // expected-warning {{explicitly assigning}}
-  a |= a; // expected-warning {{explicitly assigning}}
-  a ^= a; // expected-warning {{explicitly assigning}}
+  a &= a;
+  a |= a;
+  a ^= a;
 #endif
 }
 
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -15644,13 +15644,15 @@
Expr *LHS, Expr *RHS) {
   switch (Opc) {
   case BO_Assign:
+// Skip diagnose on compound assignment.
+DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
+[[fallthrough]];
   case BO_DivAssign:
   case BO_RemAssign:
   case BO_SubAssign:
   case BO_AndAssign:
   case BO_OrAssign:
   case BO_XorAssign:
-DiagnoseSelfAssignment(S, LHS, RHS, OpLoc, false);
 CheckIdentityFieldAssignment(LHS, RHS, OpLoc, S);
 break;
   default:
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D144309: [HLSL] add max/min library functions

2023-03-02 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/test/CodeGenHLSL/builtins/max.hlsl:12
+// NO_HALF: call i16 @llvm.smax.i16(
+int16_t test_max_short ( int16_t p0, int16_t p1 ) {
+  return max ( p0, p1 );

Just guard 16bit integer tests with #ifdef __HLSL_ENABLE_16_BIT.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144309/new/

https://reviews.llvm.org/D144309

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


[PATCH] D144309: [HLSL] add max/min library functions

2023-03-02 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

In D144309#4159431 , @bob80905 wrote:

> - ushort is now unsigned

Use uint16_t/int16_t/uint64_t/int64_t for 16/64 bit integers.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144309/new/

https://reviews.llvm.org/D144309

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


[PATCH] D144309: [HLSL] add max/min library functions

2023-02-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

In D144309#4156971 , @bob80905 wrote:

> add int support for max/min.

Sorry didn't check more :(.

Now i16/u16/i32/u32/i64/u64/f16/f32/f64 are all supported for min/max in hlsl.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144309/new/

https://reviews.llvm.org/D144309

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


[PATCH] D144309: [HLSL] add max/min library functions

2023-02-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

max/min does work on integers in HLSL.
And __builtin_elementwise_max/min support both integers and floats.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144309/new/

https://reviews.llvm.org/D144309

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


[PATCH] D144802: clang: Add __builtin_elementwise_round

2023-02-26 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/docs/LanguageExtensions.rst:646
  direction.
+ T __builtin_elementwise_round(T x)  round x to the nearest integer value 
in floating point format,   floating point types
+ rounding halfway cases to even 
(that is, to the nearest value

Lost alignment, need more spaces before the 'round x ...'



Comment at: clang/docs/LanguageExtensions.rst:647
+ T __builtin_elementwise_round(T x)  round x to the nearest integer value 
in floating point format,   floating point types
+ rounding halfway cases to even 
(that is, to the nearest value
+ that is an even integer), 
regardless of the current rounding

Is this still true for round?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144802/new/

https://reviews.llvm.org/D144802

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


[PATCH] D144120: [HLSL] add log library functions

2023-02-15 Thread Xiang Li via Phabricator via cfe-commits
python3kgae accepted this revision.
python3kgae added a comment.
This revision is now accepted and ready to land.

LGTM.
Just fix the newline at end of file for the tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144120/new/

https://reviews.llvm.org/D144120

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


[PATCH] D143207: Add codegen for llvm log10 elementwise builtin

2023-02-02 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

Add log2 together?
They're in same category.




Comment at: clang/test/Sema/aarch64-sve-vector-log-ops.c:19
+}
\ No newline at end of file


newline.



Comment at: clang/test/SemaCXX/builtins-elementwise-math.cpp:90
+}
\ No newline at end of file


newline.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143207/new/

https://reviews.llvm.org/D143207

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-02-01 Thread Xiang Li via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd5a7439e220c: [HLSL] [Dirver] add dxv as a VerifyDebug Job 
(authored by python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/Types.def
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv{{(.exe)?}}" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD:"-cc1"{{.*}}"-triple" "dxil-unknown-shadermodel6.3-library"
+// VD-NOT:dxv not found
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxo  %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxo"
+// BINDINGS-NEXT: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxo"], output: "[[DXC]].dxo"
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-phases --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=PHASES
+
+// PHASES: 0: input, "[[INPUT:.+]]", hlsl
+// PHASES-NEXT: 1: preprocessor, {0}, c++-cpp-output
+// PHASES-NEXT: 2: compiler, {1}, ir
+// PHASES-NEXT: 3: backend, {2}, assembler
+// PHASES-NEXT: 4: binary-analyzer, {3}, dx-container
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+  

[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-29 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/include/clang/Basic/DiagnosticDriverKinds.td:687
+def warn_drv_dxc_missing_dxv : Warning<"dxv not found."
+" Resulting DXIL will not be signed for use in release environments.">;
 

MaskRay wrote:
> python3kgae wrote:
> > beanz wrote:
> > > Not all `dxv` binaries can sign… some just validate. Only the “official” 
> > > releases support signing.
> > Fixed.
> Make sure there is a space after `.`. The diagnostics convention does not 
> include the trailing period.
Good catch!
Fixed.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-29 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 493149.
python3kgae marked 2 inline comments as done.
python3kgae added a comment.

add space for warning message.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/Types.def
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv{{(.exe)?}}" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD:"-cc1"{{.*}}"-triple" "dxil-unknown-shadermodel6.3-library"
+// VD-NOT:dxv not found
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxo  %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxo"
+// BINDINGS-NEXT: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxo"], output: "[[DXC]].dxo"
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-phases --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=PHASES
+
+// PHASES: 0: input, "[[INPUT:.+]]", hlsl
+// PHASES-NEXT: 1: preprocessor, {0}, c++-cpp-output
+// PHASES-NEXT: 2: compiler, {1}, ir
+// PHASES-NEXT: 3: backend, {2}, assembler
+// PHASES-NEXT: 4: binary-analyzer, {3}, dx-container
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char 

[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked an inline comment as done.
python3kgae added inline comments.



Comment at: clang/test/Driver/dxc_dxv_path.hlsl:7
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s 
-Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv" "-" "-o" "-"
+

jhuber6 wrote:
> Would this be called `dxv.exe` on Windows?
Good catch.
Changed to dxv{{(.exe)?}}"

Thanks a lot for the review.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 492941.
python3kgae marked 2 inline comments as done.
python3kgae added a comment.

Fix windows test fail.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/Types.def
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv{{(.exe)?}}" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD:"-cc1"{{.*}}"-triple" "dxil-unknown-shadermodel6.3-library"
+// VD-NOT:dxv not found
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxo  %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxo"
+// BINDINGS-NEXT: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxo"], output: "[[DXC]].dxo"
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-phases --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=PHASES
+
+// PHASES: 0: input, "[[INPUT:.+]]", hlsl
+// PHASES-NEXT: 1: preprocessor, {0}, c++-cpp-output
+// PHASES-NEXT: 2: compiler, {1}, ir
+// PHASES-NEXT: 3: backend, {2}, assembler
+// PHASES-NEXT: 4: binary-analyzer, {3}, dx-container
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char 

[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked 2 inline comments as done.
python3kgae added inline comments.



Comment at: clang/lib/Driver/ToolChains/HLSL.cpp:170
+
+Tool *clang::driver::toolchains::HLSLToolChain::getTool(
+Action::ActionClass AC) const {

jhuber6 wrote:
> python3kgae wrote:
> > jhuber6 wrote:
> > > I feel like this logic should go with the other random `Tool` versions we 
> > > have in `ToolChain.cpp`. See `ToolChain.cpp:440` and there should be 
> > > examples of similar tools.
> > This is following pattern of MachO::getTool for VerifyDebug.
> > https://github.com/llvm/llvm-project/blob/main/clang/lib/Driver/ToolChains/Darwin.cpp#L1078
> > 
> > I can add getValidator to HLSLToolChain if that helps.
> > 
> Yeah, I guess it's a style thing. Personally I don't mind having everything 
> in one place because you need to handle the ActionClass there anyway. But 
> it's not a huge deal. I'll accept either.
Thanks. I'll keep it as is then.
The validator is only for HLSL now.
If other ToolChain uses it, I'll move it to ToolChain.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 492931.
python3kgae marked an inline comment as done.
python3kgae added a comment.

rename to requiresValidation.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/Types.def
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD:"-cc1"{{.*}}"-triple" "dxil-unknown-shadermodel6.3-library"
+// VD-NOT:dxv not found
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxo  %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxo"
+// BINDINGS-NEXT: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxo"], output: "[[DXC]].dxo"
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-phases --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=PHASES
+
+// PHASES: 0: input, "[[INPUT:.+]]", hlsl
+// PHASES-NEXT: 1: preprocessor, {0}, c++-cpp-output
+// PHASES-NEXT: 2: compiler, {1}, ir
+// PHASES-NEXT: 3: backend, {2}, assembler
+// PHASES-NEXT: 4: binary-analyzer, {3}, dx-container
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char 

[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked an inline comment as done.
python3kgae added inline comments.



Comment at: clang/lib/Driver/Driver.cpp:4226
+Args.ClaimAllArgs(options::OPT_cl_ignored_Group);
+  }
 

jhuber6 wrote:
> nit. remember to `clang-format`
arc did find some clang-format issue.
But missed this one :(




Comment at: clang/lib/Driver/ToolChains/HLSL.cpp:170
+
+Tool *clang::driver::toolchains::HLSLToolChain::getTool(
+Action::ActionClass AC) const {

jhuber6 wrote:
> I feel like this logic should go with the other random `Tool` versions we 
> have in `ToolChain.cpp`. See `ToolChain.cpp:440` and there should be examples 
> of similar tools.
This is following pattern of MachO::getTool for VerifyDebug.
https://github.com/llvm/llvm-project/blob/main/clang/lib/Driver/ToolChains/Darwin.cpp#L1078

I can add getValidator to HLSLToolChain if that helps.




Comment at: clang/lib/Driver/ToolChains/HLSL.h:53
   static std::optional parseTargetProfile(StringRef 
TargetProfile);
+  bool needValidation(llvm::opt::DerivedArgList ) const;
+

jhuber6 wrote:
> Is `needValidation` a good name here? It's asking more like `hasValidator` or 
> `supportsValidation`.
It is combination of hasValidator and requireValidator.
Maybe create hasValidator and requireValidator then move the warning reporting 
back to Driver?
Something like

```
if (TC.requireValidator()) {
if (TC.hasValidator()) {
add the action.
} else {
report warning.
}
}
```



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/lib/Driver/Driver.cpp:4217-4218
+// Only add action when needValidation.
+const auto  = getToolChain(Args, C.getDefaultToolChain().getTriple());
+const auto *HLSLTC = static_cast();
+if (HLSLTC->needValidation(Args, *this)) {

jhuber6 wrote:
> This can create a new `ToolChain`. We probably don't want that. Maybe someone 
> more familiar with this compilation mode can chime in. But my guess is that 
> when we created the `Compilation`.
> 
> This code will only fire if the above triple matches for the default 
> ToolChain. So we should be safe in just casting it directly.
Switched to getDefaultToolChain.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 492912.
python3kgae marked 2 inline comments as done.
python3kgae added a comment.

switch to getDefaultToolChain.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/Types.def
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD:"-cc1"{{.*}}"-triple" "dxil-unknown-shadermodel6.3-library"
+// VD-NOT:dxv not found
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxo  %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxo"
+// BINDINGS-NEXT: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxo"], output: "[[DXC]].dxo"
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-phases --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=PHASES
+
+// PHASES: 0: input, "[[INPUT:.+]]", hlsl
+// PHASES-NEXT: 1: preprocessor, {0}, c++-cpp-output
+// PHASES-NEXT: 2: compiler, {1}, ir
+// PHASES-NEXT: 3: backend, {2}, assembler
+// PHASES-NEXT: 4: binary-analyzer, {3}, dx-container
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char 

[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 492894.
python3kgae marked 2 inline comments as done.
python3kgae added a comment.

cast ToolChain to HLSLToolChain.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/Types.def
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD:"-cc1"{{.*}}"-triple" "dxil-unknown-shadermodel6.3-library"
+// VD-NOT:dxv not found
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxo  %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxo"
+// BINDINGS-NEXT: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxo"], output: "[[DXC]].dxo"
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-phases --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=PHASES
+
+// PHASES:+- 0: input, "[[INPUT:.+]]", hlsl
+// PHASES-NEXT:+- 1: preprocessor, {0}, c++-cpp-output
+// PHASES-NEXT:+- 2: compiler, {1}, ir
+// PHASES-NEXT:3: backend, {2}, assembler
+// PHASES-NEXT:4: binary-analyzer, {3}, dx-container
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char 

[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked 6 inline comments as done.
python3kgae added inline comments.



Comment at: clang/include/clang/Driver/Types.def:110
 TYPE("api-information",  API_INFO, INVALID, "json",   
phases::Precompile)
+TYPE("dx-container", DX_CONTAINER, INVALID, "dxc",
phases::Compile, phases::Backend)
 TYPE("none", Nothing,  INVALID, nullptr,  
phases::Compile, phases::Backend, phases::Assemble, phases::Link)

beanz wrote:
> The normal dx-container extension is `dxbc` right? not `dxc`?
There's no official extension.
Will go with dxo.



Comment at: clang/lib/Driver/Driver.cpp:4218
+// Only add action when needValidation.
+if (toolchains::HLSLToolChain::needValidation(Args, *this,
+  C.getDefaultToolChain())) {

jhuber6 wrote:
> python3kgae wrote:
> > jhuber6 wrote:
> > > This should work, shouldn't it?
> > > ```
> > > const auto  = static_cast > > &>(getToolChain());
> > > ```
> > I'm not sure getToolChain will return a HLSLToolChain.
> > Is it OK to use dynamic_cast?
> Well, how is the compilation normally invoked? The `Driver::getToolChain()` 
> function clearly returns an `HLSLToolChain` if the triple is `ShaderModel`. 
> I'm assuming that's the only way to create this, and its set in the 
> compilation. So it should be the ToolChain of the main compilation. This is 
> in contract to an offloading compilation that can have multiple toolchains 
> floating around I'm guessing.
> 
> And no, `dynamic_cast` doesn't work in LLVM. LLVM RTTI requires implementing 
> a `classof` function, e.g. 
> https://llvm.org/docs/HowToSetUpLLVMStyleRTTI.html, which the ToolChains 
> don't use.

```
const auto  = static_cast(
getToolChain(Args, C.getDefaultToolChain().getTriple()));
```
will hit " no viable conversion from 'const clang::driver::ToolChain' to 'const 
toolchains::HLSLToolChain'"

```
const auto  = getToolChain(Args, C.getDefaultToolChain().getTriple());
const auto *HLSLTC = static_cast();
```
works, is it OK?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked an inline comment as done.
python3kgae added inline comments.



Comment at: clang/lib/Driver/Driver.cpp:4218
+// Only add action when needValidation.
+if (toolchains::HLSLToolChain::needValidation(Args, *this,
+  C.getDefaultToolChain())) {

jhuber6 wrote:
> This should work, shouldn't it?
> ```
> const auto  = static_cast &>(getToolChain());
> ```
I'm not sure getToolChain will return a HLSLToolChain.
Is it OK to use dynamic_cast?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked an inline comment as done.
python3kgae added inline comments.



Comment at: clang/lib/Driver/Driver.cpp:4216
+  llvm::Triple T(getTargetTriple());
+  if (T.getArch() == llvm::Triple::dxil && 
!Args.getLastArg(options::OPT_dxc_disable_validation)) {
+// Only add action when 'dxv' exists.

jhuber6 wrote:
> Could we move this logic into the HLSL ToolChain like we do with CUDA / ROCm? 
> You should be able to then cast the toolchain to `HLSLToolChain` and query it 
> here.
Cannot find a cast example :(
Created a static method for HLSLToolChain to put the logic.



Comment at: clang/lib/Driver/ToolChains/HLSL.cpp:171
+// discover the dxv executable.
+getProgramPaths().push_back(getDriver().Dir);
+}

jhuber6 wrote:
> Just to check since I'm not really familiar at all with this toolchain, but 
> does `dxv` exist as a clang tool? This path exists to search in the 
> `/path/to/llvm/install/bin` directory. If it's an external binary this 
> shouldn't be necessary.
It will be external binary for a long time.
Removed the getDriver().Dir.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 492878.
python3kgae marked 9 inline comments as done.
python3kgae added a comment.

add DX_CONTAINER Driver type.
Code cleanup.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/Types.def
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD:"-cc1"{{.*}}"-triple" "dxil-unknown-shadermodel6.3-library"
+// VD-NOT:dxv not found
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxc"
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxc"], output: "[[DXC]].dxc"
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-phases --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=PHASES
+
+// PHASES:+- 0: input, "[[INPUT:.+]]", hlsl
+// PHASES:+- 1: preprocessor, {0}, c++-cpp-output
+// PHASES:+- 2: compiler, {1}, ir
+// PHASES:3: backend, {2}, assembler
+// PHASES:4: binary-analyzer, {3}, dx-container
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char *LinkingOutput) 

[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-26 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked 2 inline comments as done.
python3kgae added a comment.

In D141705#4082935 , @jhuber6 wrote:

> I'm not overly familiar with HLSL or DirectX here. Most of the changes are 
> purely mechanical, but I don't see anywhere we create the tool. Does that 
> come later? Normally you'd test these with `-ccc-print-bindings`, 
> `-ccc-print-bindings`, and `-###`.

The tool ('dxv') is not included in hlsl compiler release yet. It will come 
later.
Added test with ccc-print-bindings.




Comment at: clang/include/clang/Basic/DiagnosticDriverKinds.td:687
+def warn_drv_dxc_missing_dxv : Warning<"dxv not found."
+" Resulting DXIL will not be signed for use in release environments.">;
 

beanz wrote:
> Not all `dxv` binaries can sign… some just validate. Only the “official” 
> releases support signing.
Fixed.



Comment at: clang/lib/Driver/ToolChains/HLSL.cpp:146-147
+// Not find dxv.
+C.getDriver().Diag(diag::warn_drv_dxc_missing_dxv);
+return;
+  }

jhuber6 wrote:
> Can we really just ignore this if we don't find the path? Normally this is a 
> hard error. If this is purely optional I would probably suggest not creating 
> the job in the first place.
This is optional.
I'll move the check when create the job.



Comment at: clang/lib/Driver/ToolChains/HLSL.cpp:174
+// Lookup binaries into the driver directory, this is used to
+// discover the clang-offload-bundler executable.
+getProgramPaths().push_back(getDriver().Dir);

jhuber6 wrote:
> Copy paste.
Good catch.
Fixed.



Comment at: clang/test/Misc/warning-flags.c:19
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 

jhuber6 wrote:
> This comment looks relevant.
Fixed.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a Driver Action Job

2023-01-26 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 492559.
python3kgae marked an inline comment as done.
python3kgae added a comment.

Only create dxv job when 'dxv' exist.
Test ccc-print-bindings.
Code cleanup.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Basic/DiagnosticGroups.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,15 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD-NOT:dxv not found
+// VD:"-triple" "dxil-unknown-shadermodel6.3-library"
+
+// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxc  %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["{{.*}}dxc_dxv_path.hlsl"], output: "[[DXC:.+]].dxc"
+// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxc"], output: (nothing)
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char *LinkingOutput) const override;
+};
+} // namespace hlsl
+} // namespace tools
+
 namespace toolchains {
 
 class LLVM_LIBRARY_VISIBILITY HLSLToolChain : public ToolChain {
 public:
   HLSLToolChain(const Driver , const llvm::Triple ,
 const llvm::opt::ArgList );
+  Tool *getTool(Action::ActionClass AC) const override;
+
   bool isPICDefault() const 

[PATCH] D136913: [HLSL] support RWByteAddressBuffer.

2023-01-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 490274.
python3kgae added a comment.

Rebase and update test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136913/new/

https://reviews.llvm.org/D136913

Files:
  clang/include/clang/Sema/HLSLExternalSemaSource.h
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/lib/Sema/SemaExprMember.cpp
  clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
  clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl

Index: clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -fsyntax-only -verify %s
+
+typedef vector float3;
+
+RWByteAddressBuffer Buffer;
+
+[numthreads(1,1,1)]
+void main() {
+  (void)Buffer.h; // expected-error {{'h' is a private member of 'hlsl::RWByteAddressBuffer'}}
+  // expected-note@* {{implicitly declared private here}}
+  Buffer.Load(0);
+}
Index: clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
===
--- /dev/null
+++ clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
@@ -0,0 +1,104 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -fsyntax-only -ast-dump %s | FileCheck %s
+
+RWByteAddressBuffer U;
+typedef unsigned int uint;
+typedef vector float2;
+
+// CHECK:CXXRecordDecl 0x{{[0-9a-f]+}} <>  implicit referenced  class RWByteAddressBuffer definition
+// CHECK:FinalAttr 0x{{[0-9a-f]+}} <> Implicit final
+// CHECK-NEXT:HLSLResourceAttr 0x{{[0-9a-f]+}} <> Implicit UAV RawBuffer
+// CHECK-NEXT:-FieldDecl 0x[[HDL:[0-9a-f]+]] <>  implicit referenced h 'void *'
+// CHECK-NEXT:CXXConstructorDecl 0x{{[0-9a-f]+}} <>  used RWByteAddressBuffer 'void ()' inline
+// CHECK-NEXT:CompoundStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:BinaryOperator 0x{{[0-9a-f]+}} <> 'void *' lvalue '='
+// CHECK-NEXT:MemberExpr 0x{{[0-9a-f]+}} <> 'void *' lvalue .h 0x[[HDL]]
+// CHECK-NEXT:-CXXThisExpr 0x{{[0-9a-f]+}} <> 'hlsl::RWByteAddressBuffer' lvalue implicit this
+// CHECK-NEXT:CallExpr 0x{{[0-9a-f]+}} <> 'void *'
+// CHECK-NEXT:-DeclRefExpr 0x{{[0-9a-f]+}} <> 'void *(unsigned char) throw()' Function 0x{{[0-9a-f]+}} '__builtin_hlsl_create_handle' 'void *(unsigned char) throw()'
+// CHECK-NEXT:-IntegerLiteral 0x{{[0-9a-f]+}} <> 'unsigned char' 1
+// CHECK-NEXT:FunctionTemplateDecl 0x{{[0-9a-f]+}} <>  Load
+// CHECK-NEXT:TemplateTypeParmDecl 0x{{[0-9a-f]+}} <>  class depth 0 index 0 T
+// CHECK-NEXT:CXXMethodDecl 0x{{[0-9a-f]+}} <>  Load 'T (unsigned int)'
+// CHECK-NEXT:ParmVarDecl 0x[[LOAD_PARAM:[0-9a-f]+]] <>  ByteAddress 'unsigned int'
+// CHECK-NEXT:CompoundStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:ReturnStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:ImplicitCastExpr 0x{{[0-9a-f]+}} <> 'T' 
+// CHECK-NEXT:UnaryOperator 0x{{[0-9a-f]+}} <> 'T' lvalue prefix '*' cannot overflow
+// CHECK-NEXT:CStyleCastExpr 0x{{[0-9a-f]+}} <> 'T *' lvalue 
+// CHECK-NEXT:inaryOperator 0x{{[0-9a-f]+}} <> 'unsigned char *' '+'
+// CHECK-NEXT:ImplicitCastExpr 0x{{[0-9a-f]+}} <> 'unsigned char *' 
+// CHECK-NEXT:CStyleCastExpr 0x{{[0-9a-f]+}} <> 'unsigned char *' lvalue 
+// CHECK-NEXT:MemberExpr 0x{{[0-9a-f]+}} <> 'void *' lvalue ->h 0x[[HDL]]
+// CHECK-NEXT:CXXThisExpr 0x{{[0-9a-f]+}} <> 'hlsl::RWByteAddressBuffer *' implicit this
+// CHECK-NEXT:DeclRefExpr 0x{{[0-9a-f]+}} <> 'unsigned int' ParmVar 0x[[LOAD_PARAM]] 'ByteAddress' 'unsigned int'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_F:[0-9a-f]+]] <>  used Load 'float (unsigned int)'
+// CHECK-NEXT:TemplateArgument type 'float'
+// CHECK-NEXT:BuiltinType 0x{{[0-9a-f]+}} 'float'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_F2:[0-9a-f]+]] <>  used Load 'float (unsigned int) __attribute__((ext_vector_type(2)))'
+// CHECK-NEXT:TemplateArgument type 'float __attribute__((ext_vector_type(2)))'
+// CHECK-NEXT:ExtVectorType 0x{{[0-9a-f]+}} 'float __attribute__((ext_vector_type(2)))' 2
+// CHECK-NEXT:BuiltinType 0x{{[0-9a-f]+}} 'float'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_S:[0-9a-f]+]] <>  used Load 'S (unsigned int)'
+// CHECK-NEXT:TemplateArgument type 'S'
+// CHECK-NEXT:-RecordType 0x{{[0-9a-f]+}} 'S'
+// CHECK-NEXT:CXXRecord 0x[[RECORD:[0-9a-f]+]] 'S'
+
+// CHECK:VarDecl 0x[[BUF:[0-9a-f]+]] <{{.+}}:1, col:21> col:21 used U 'RWByteAddressBuffer':'hlsl::RWByteAddressBuffer'
+
+// CHECK:FunctionDecl 0x{{[0-9a-f]+}}  line:{{[0-9]+}}:7 foo 'float (uint)'
+// CHECK-NEXT:ParmVarDecl 0x[[FOO_PARAM:[0-9a-f]+]]  col:16 used i 'uint':'unsigned int'
+// CHECK-NEXT:CompoundStmt 0x{{[0-9a-f]+}} 
+// CHECK-NEXT:ReturnStmt 0x{{[0-9a-f]+}} 
+// CHECK-NEXT:CXXMemberCallExpr 0x{{[0-9a-f]+}}  'float':'float'
+// CHECK-NEXT:MemberExpr 0x{{[0-9a-f]+}}  '' .Load 0x[[LOAD_F]]
+// CHECK-NEXT:DeclRefExpr 0x{{[0-9a-f]+}}  'RWByteAddressBuffer':'hlsl::RWByteAddressBuffer' lvalue Var 0x[[BUF]] 'U' 'RWByteAddressBuffer':'hlsl::RWByteAddressBuffer'
+// CHECK-NEXT:ImplicitCastExpr 

[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2023-01-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

In D136031#4062756 , @beanz wrote:

> @python3kgae, this change introduced a bunch of warning spew because it is 
> using an API that was deprecated shortly before the change merged. Can you 
> please address this?

Sure.
I'll fix it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a VerifyDebug Job

2023-01-17 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

In D141705#4059162 , @beanz wrote:

> Re-using the `VerifyDebug` action really doesn't make sense. That's not what 
> the DXIL validator does, and it will be a source of confusion forever.

Added BinaryAnalyzeJobClass.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

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


[PATCH] D141705: [HLSL] [Dirver] add dxv as a VerifyDebug Job

2023-01-17 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 489935.
python3kgae marked 2 inline comments as done.
python3kgae added a comment.

Add BinaryAnalyzeJobClass.
Add -Vd to disable validation.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D141705/new/

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Driver/Action.h
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/Action.cpp
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChain.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl
  clang/test/Misc/warning-flags.c
  clang/unittests/Driver/DXCModeTest.cpp

Index: clang/unittests/Driver/DXCModeTest.cpp
===
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -34,7 +34,7 @@
 DiagnosticsEngine ) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data());
   EXPECT_EQ(Diags.getNumErrors(), 0u);
@@ -47,7 +47,7 @@
 unsigned NumOfErrors) {
   Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem);
   std::unique_ptr C{TheDriver.BuildCompilation(
-  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})};
+  {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl", "-Vd"})};
   EXPECT_TRUE(C);
   EXPECT_EQ(Diags.getNumErrors(), NumOfErrors);
   EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data());
Index: clang/test/Misc/warning-flags.c
===
--- clang/test/Misc/warning-flags.c
+++ clang/test/Misc/warning-flags.c
@@ -18,7 +18,7 @@
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 
-CHECK: Warnings without flags (66):
+CHECK: Warnings without flags (67):
 
 CHECK-NEXT:   ext_expected_semi_decl_list
 CHECK-NEXT:   ext_explicit_specialization_storage_class
@@ -45,6 +45,7 @@
 CHECK-NEXT:   warn_double_const_requires_fp64
 CHECK-NEXT:   warn_drv_assuming_mfloat_abi_is
 CHECK-NEXT:   warn_drv_clang_unsupported
+CHECK-NEXT:   warn_drv_dxc_missing_dxv
 CHECK-NEXT:   warn_drv_pch_not_first_include
 CHECK-NEXT:   warn_dup_category_def
 CHECK-NEXT:   warn_enum_value_overflow
Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,11 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv" "-" "-o" "-"
+
+// RUN: %clang_dxc -I test -Vd -Tlib_6_3  -### %s 2>&1 | FileCheck %s --check-prefix=VD
+// VD-NOT:dxv not found
+// VD:"-triple" "dxil-unknown-shadermodel6.3-library"
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY Validator : public Tool {
+public:
+  Validator(const ToolChain ) : Tool("hlsl::Validator", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const 

[PATCH] D141705: [HLSL] [Dirver] add dxv as a VerifyDebug Job

2023-01-13 Thread Xiang Li via Phabricator via cfe-commits
python3kgae created this revision.
python3kgae added reviewers: beanz, pow2clk, bogner, bob80905.
Herald added a subscriber: Anastasia.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay.
Herald added a project: clang.

New option --dxv-path is  added for dxc mode to set the installation path for 
dxv.
If cannot find dxv, a warning will be report.

dxv will be executed with command line dxv file_name -o file_name.
It will validate and sign the file and overwrite it.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D141705

Files:
  clang/include/clang/Basic/DiagnosticDriverKinds.td
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/Driver.cpp
  clang/lib/Driver/ToolChains/HLSL.cpp
  clang/lib/Driver/ToolChains/HLSL.h
  clang/test/Driver/dxc_D.hlsl
  clang/test/Driver/dxc_I.hlsl
  clang/test/Driver/dxc_dxv_path.hlsl

Index: clang/test/Driver/dxc_dxv_path.hlsl
===
--- /dev/null
+++ clang/test/Driver/dxc_dxv_path.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
+
+// Make sure report warning.
+// CHECK:dxv not found.
+
+// RUN: echo "dxv" > %T/dxv && chmod 754 %T/dxv && %clang_dxc --dxv-path=%T %s -Tlib_6_3 -### 2>&1 | FileCheck %s --check-prefix=DXV_PATH
+// DXV_PATH:dxv" "-" "-o" "-"
Index: clang/test/Driver/dxc_I.hlsl
===
--- clang/test/Driver/dxc_I.hlsl
+++ clang/test/Driver/dxc_I.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -I test  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -I test -Tlib_6_3  -### %s 2>&1 | FileCheck %s
 
 // Make sure -I send to cc1.
 // CHECK:"-I" "test"
Index: clang/test/Driver/dxc_D.hlsl
===
--- clang/test/Driver/dxc_D.hlsl
+++ clang/test/Driver/dxc_D.hlsl
@@ -1,4 +1,4 @@
-// RUN: %clang_dxc -DTEST=2  -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -DTEST=2 -Tlib_6_7 -### %s 2>&1 | FileCheck %s
 // RUN: %clang_dxc -DTEST=2  -Tlib_6_7 %s -fcgl -Fo - | FileCheck %s --check-prefix=ERROR
 
 // Make sure -D send to cc1.
Index: clang/lib/Driver/ToolChains/HLSL.h
===
--- clang/lib/Driver/ToolChains/HLSL.h
+++ clang/lib/Driver/ToolChains/HLSL.h
@@ -9,17 +9,37 @@
 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HLSL_H
 
+#include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
 
+namespace tools {
+
+namespace hlsl {
+class LLVM_LIBRARY_VISIBILITY VerifyDebug : public Tool {
+public:
+  VerifyDebug(const ToolChain ) : Tool("hlsl::VerifyDebug", "dxv", TC) {}
+
+  bool hasIntegratedCPP() const override { return false; }
+
+  void ConstructJob(Compilation , const JobAction ,
+const InputInfo , const InputInfoList ,
+const llvm::opt::ArgList ,
+const char *LinkingOutput) const override;
+};
+} // namespace hlsl
+} // namespace tools
+
 namespace toolchains {
 
 class LLVM_LIBRARY_VISIBILITY HLSLToolChain : public ToolChain {
 public:
   HLSLToolChain(const Driver , const llvm::Triple ,
 const llvm::opt::ArgList );
+  Tool *getTool(Action::ActionClass AC) const override;
+
   bool isPICDefault() const override { return false; }
   bool isPIEDefault(const llvm::opt::ArgList ) const override {
 return false;
@@ -30,6 +50,9 @@
   TranslateArgs(const llvm::opt::DerivedArgList , StringRef BoundArch,
 Action::OffloadKind DeviceOffloadKind) const override;
   static std::optional parseTargetProfile(StringRef TargetProfile);
+
+private:
+  mutable std::unique_ptr VerifyDebug;
 };
 
 } // end namespace toolchains
Index: clang/lib/Driver/ToolChains/HLSL.cpp
===
--- clang/lib/Driver/ToolChains/HLSL.cpp
+++ clang/lib/Driver/ToolChains/HLSL.cpp
@@ -8,7 +8,9 @@
 
 #include "HLSL.h"
 #include "CommonArgs.h"
+#include "clang/Driver/Compilation.h"
 #include "clang/Driver/DriverDiagnostic.h"
+#include "clang/Driver/Job.h"
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/ADT/Triple.h"
 
@@ -133,10 +135,53 @@
 
 } // namespace
 
+void tools::hlsl::VerifyDebug::ConstructJob(Compilation , const JobAction ,
+const InputInfo ,
+const InputInfoList ,
+const ArgList ,
+const char *LinkingOutput) const {
+  std::string DxvPath = getToolChain().GetProgramPath("dxv");
+  if (DxvPath == "dxv") {
+// Not find dxv.
+C.getDriver().Diag(diag::warn_drv_dxc_missing_dxv);
+return;
+  }
+
+  ArgStringList CmdArgs;
+  assert(Inputs.size() == 1 && "Unable to handle multiple inputs.");
+  const InputInfo  = 

[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2023-01-12 Thread Xiang Li via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG944f4b280585: [DirectX backend] add support ConstantBuffer 
to DXILResource.h (authored by python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

Files:
  llvm/lib/Target/DirectX/CBufferDataLayout.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.h
  llvm/lib/Target/DirectX/CMakeLists.txt
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/cbuf.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_0.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_1.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
  llvm/test/tools/dxil-dis/BasicIR.ll
  llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
  llvm/unittests/Target/DirectX/CMakeLists.txt

Index: llvm/unittests/Target/DirectX/CMakeLists.txt
===
--- llvm/unittests/Target/DirectX/CMakeLists.txt
+++ llvm/unittests/Target/DirectX/CMakeLists.txt
@@ -11,5 +11,6 @@
 )
 
 add_llvm_target_unittest(DirectXTests
+  CBufferDataLayoutTests.cpp
   PointerTypeAnalysisTests.cpp
   )
Index: llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
===
--- /dev/null
+++ llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
@@ -0,0 +1,153 @@
+//===- llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+
+#include "CBufferDataLayout.h"
+#include "llvm/IR/DataLayout.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Type.h"
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using ::testing::Contains;
+using ::testing::Pair;
+
+using namespace llvm;
+using namespace llvm::dxil;
+
+void checkLegacyLayout(CBufferDataLayout , Type *T16, Type *T32,
+   Type *T64) {
+  // Basic types.
+  EXPECT_EQ(2ULL, CBDL.getTypeAllocSizeInBytes(T16).getFixedSize());
+  EXPECT_EQ(4ULL, CBDL.getTypeAllocSizeInBytes(T32).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T64).getFixedSize());
+  // Vector types.
+  Type *T16V2 = FixedVectorType::get(T16, 2);
+  Type *T32V2 = FixedVectorType::get(T32, 2);
+  Type *T64V2 = FixedVectorType::get(T64, 2);
+  Type *T16V3 = FixedVectorType::get(T16, 3);
+  Type *T32V3 = FixedVectorType::get(T32, 3);
+  Type *T64V3 = FixedVectorType::get(T64, 3);
+  Type *T16V4 = FixedVectorType::get(T16, 4);
+  Type *T32V4 = FixedVectorType::get(T32, 4);
+  Type *T64V4 = FixedVectorType::get(T64, 4);
+  EXPECT_EQ(4ULL, CBDL.getTypeAllocSizeInBytes(T16V2).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T32V2).getFixedSize());
+  EXPECT_EQ(16ULL, CBDL.getTypeAllocSizeInBytes(T64V2).getFixedSize());
+  EXPECT_EQ(6ULL, CBDL.getTypeAllocSizeInBytes(T16V3).getFixedSize());
+  EXPECT_EQ(12ULL, CBDL.getTypeAllocSizeInBytes(T32V3).getFixedSize());
+  EXPECT_EQ(24ULL, CBDL.getTypeAllocSizeInBytes(T64V3).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T16V4).getFixedSize());
+  EXPECT_EQ(16ULL, CBDL.getTypeAllocSizeInBytes(T32V4).getFixedSize());
+  EXPECT_EQ(32ULL, CBDL.getTypeAllocSizeInBytes(T64V4).getFixedSize());
+
+  // Array types.
+
+  ArrayType *T16A3 = ArrayType::get(T16, 3);
+  ArrayType *T32A3 = ArrayType::get(T32, 3);
+  ArrayType *T64A3 = ArrayType::get(T64, 3);
+
+  EXPECT_EQ(34ULL, CBDL.getTypeAllocSizeInBytes(T16A3).getFixedSize());
+  EXPECT_EQ(36ULL, CBDL.getTypeAllocSizeInBytes(T32A3).getFixedSize());
+  EXPECT_EQ(40ULL, CBDL.getTypeAllocSizeInBytes(T64A3).getFixedSize());
+
+  ArrayType *T16V3A3 = ArrayType::get(T16V3, 3);
+  ArrayType *T32V3A3 = ArrayType::get(T32V3, 3);
+  ArrayType *T64V3A3 = ArrayType::get(T64V3, 3);
+
+  EXPECT_EQ(38ULL, CBDL.getTypeAllocSizeInBytes(T16V3A3).getFixedSize());
+  EXPECT_EQ(44ULL, CBDL.getTypeAllocSizeInBytes(T32V3A3).getFixedSize());
+  EXPECT_EQ(88ULL, CBDL.getTypeAllocSizeInBytes(T64V3A3).getFixedSize());
+
+  ArrayType *T16V3A3A3 = ArrayType::get(T16V3A3, 3);
+  ArrayType *T32V3A3A3 = ArrayType::get(T32V3A3, 3);
+  ArrayType *T64V3A3A3 = ArrayType::get(T64V3A3, 3);
+
+  EXPECT_EQ((48 * 2 + 38ULL),
+CBDL.getTypeAllocSizeInBytes(T16V3A3A3).getFixedSize());
+  EXPECT_EQ((48 * 2 + 44ULL),
+CBDL.getTypeAllocSizeInBytes(T32V3A3A3).getFixedSize());
+  EXPECT_EQ((96 * 2 + 88ULL),
+CBDL.getTypeAllocSizeInBytes(T64V3A3A3).getFixedSize());
+
+  // Struct types.
+  StructType *BasicMix0 = 

[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2023-01-12 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 488707.
python3kgae added a comment.

Fix test fail after rebase.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

Files:
  llvm/lib/Target/DirectX/CBufferDataLayout.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.h
  llvm/lib/Target/DirectX/CMakeLists.txt
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/cbuf.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_0.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_1.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
  llvm/test/tools/dxil-dis/BasicIR.ll
  llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
  llvm/unittests/Target/DirectX/CMakeLists.txt

Index: llvm/unittests/Target/DirectX/CMakeLists.txt
===
--- llvm/unittests/Target/DirectX/CMakeLists.txt
+++ llvm/unittests/Target/DirectX/CMakeLists.txt
@@ -11,5 +11,6 @@
 )
 
 add_llvm_target_unittest(DirectXTests
+  CBufferDataLayoutTests.cpp
   PointerTypeAnalysisTests.cpp
   )
Index: llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
===
--- /dev/null
+++ llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
@@ -0,0 +1,153 @@
+//===- llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+
+#include "CBufferDataLayout.h"
+#include "llvm/IR/DataLayout.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Type.h"
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using ::testing::Contains;
+using ::testing::Pair;
+
+using namespace llvm;
+using namespace llvm::dxil;
+
+void checkLegacyLayout(CBufferDataLayout , Type *T16, Type *T32,
+   Type *T64) {
+  // Basic types.
+  EXPECT_EQ(2ULL, CBDL.getTypeAllocSizeInBytes(T16).getFixedSize());
+  EXPECT_EQ(4ULL, CBDL.getTypeAllocSizeInBytes(T32).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T64).getFixedSize());
+  // Vector types.
+  Type *T16V2 = FixedVectorType::get(T16, 2);
+  Type *T32V2 = FixedVectorType::get(T32, 2);
+  Type *T64V2 = FixedVectorType::get(T64, 2);
+  Type *T16V3 = FixedVectorType::get(T16, 3);
+  Type *T32V3 = FixedVectorType::get(T32, 3);
+  Type *T64V3 = FixedVectorType::get(T64, 3);
+  Type *T16V4 = FixedVectorType::get(T16, 4);
+  Type *T32V4 = FixedVectorType::get(T32, 4);
+  Type *T64V4 = FixedVectorType::get(T64, 4);
+  EXPECT_EQ(4ULL, CBDL.getTypeAllocSizeInBytes(T16V2).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T32V2).getFixedSize());
+  EXPECT_EQ(16ULL, CBDL.getTypeAllocSizeInBytes(T64V2).getFixedSize());
+  EXPECT_EQ(6ULL, CBDL.getTypeAllocSizeInBytes(T16V3).getFixedSize());
+  EXPECT_EQ(12ULL, CBDL.getTypeAllocSizeInBytes(T32V3).getFixedSize());
+  EXPECT_EQ(24ULL, CBDL.getTypeAllocSizeInBytes(T64V3).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T16V4).getFixedSize());
+  EXPECT_EQ(16ULL, CBDL.getTypeAllocSizeInBytes(T32V4).getFixedSize());
+  EXPECT_EQ(32ULL, CBDL.getTypeAllocSizeInBytes(T64V4).getFixedSize());
+
+  // Array types.
+
+  ArrayType *T16A3 = ArrayType::get(T16, 3);
+  ArrayType *T32A3 = ArrayType::get(T32, 3);
+  ArrayType *T64A3 = ArrayType::get(T64, 3);
+
+  EXPECT_EQ(34ULL, CBDL.getTypeAllocSizeInBytes(T16A3).getFixedSize());
+  EXPECT_EQ(36ULL, CBDL.getTypeAllocSizeInBytes(T32A3).getFixedSize());
+  EXPECT_EQ(40ULL, CBDL.getTypeAllocSizeInBytes(T64A3).getFixedSize());
+
+  ArrayType *T16V3A3 = ArrayType::get(T16V3, 3);
+  ArrayType *T32V3A3 = ArrayType::get(T32V3, 3);
+  ArrayType *T64V3A3 = ArrayType::get(T64V3, 3);
+
+  EXPECT_EQ(38ULL, CBDL.getTypeAllocSizeInBytes(T16V3A3).getFixedSize());
+  EXPECT_EQ(44ULL, CBDL.getTypeAllocSizeInBytes(T32V3A3).getFixedSize());
+  EXPECT_EQ(88ULL, CBDL.getTypeAllocSizeInBytes(T64V3A3).getFixedSize());
+
+  ArrayType *T16V3A3A3 = ArrayType::get(T16V3A3, 3);
+  ArrayType *T32V3A3A3 = ArrayType::get(T32V3A3, 3);
+  ArrayType *T64V3A3A3 = ArrayType::get(T64V3A3, 3);
+
+  EXPECT_EQ((48 * 2 + 38ULL),
+CBDL.getTypeAllocSizeInBytes(T16V3A3A3).getFixedSize());
+  EXPECT_EQ((48 * 2 + 44ULL),
+CBDL.getTypeAllocSizeInBytes(T32V3A3A3).getFixedSize());
+  EXPECT_EQ((96 * 2 + 88ULL),
+CBDL.getTypeAllocSizeInBytes(T64V3A3A3).getFixedSize());
+
+  // Struct types.
+  StructType *BasicMix0 = StructType::get(T16, T32, T64);
+  StructType *BasicMix1 = StructType::get(T16, T64, T32);
+  StructType *BasicMix2 = StructType::get(T32, T64, T16);
+  

[PATCH] D140489: Add builtin_elementwise_log

2023-01-11 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/docs/LanguageExtensions.rst:638
  T __builtin_elementwise_floor(T x)  return the largest integral value 
less than or equal to xfloating point types
+ T __builtin_elementwise_log(T x)return the natural logarithm of x 
   floating point types
  T __builtin_elementwise_roundeven(T x)  round x to the nearest integer 
value in floating point format,   floating point types

Shall we add log2 and log10 together?



Comment at: clang/test/Sema/riscv-sve-vector-log-ops.c:11
+
+  return __builtin_elementwise_sin(v);
+  // expected-error@-1 {{1st argument must be a vector, integer or floating 
point type}}

log here?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D140489/new/

https://reviews.llvm.org/D140489

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


[PATCH] D139935: [NFC] [Doc] Fix example for AnnotateTypeDocs

2023-01-05 Thread Xiang Li via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGad48e9669a80: [NFC] [Doc] Fix example for AnnotateTypeDocs 
(authored by python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139935/new/

https://reviews.llvm.org/D139935

Files:
  clang/include/clang/Basic/AttrDocs.td


Index: clang/include/clang/Basic/AttrDocs.td
===
--- clang/include/clang/Basic/AttrDocs.td
+++ clang/include/clang/Basic/AttrDocs.td
@@ -6705,7 +6705,7 @@
 
 .. code-block:: c++
 
-  int* [[clang::annotate("category1", "foo", 1)]] 
f(int[[clang::annotate("category2")]] *);
+  int* [[clang::annotate_type("category1", "foo", 1)]] 
f(int[[clang::annotate_type("category2")]] *);
 
 The attribute does not have any effect on the semantics of the type system,
 neither type checking rules, nor runtime semantics. In particular:


Index: clang/include/clang/Basic/AttrDocs.td
===
--- clang/include/clang/Basic/AttrDocs.td
+++ clang/include/clang/Basic/AttrDocs.td
@@ -6705,7 +6705,7 @@
 
 .. code-block:: c++
 
-  int* [[clang::annotate("category1", "foo", 1)]] f(int[[clang::annotate("category2")]] *);
+  int* [[clang::annotate_type("category1", "foo", 1)]] f(int[[clang::annotate_type("category2")]] *);
 
 The attribute does not have any effect on the semantics of the type system,
 neither type checking rules, nor runtime semantics. In particular:
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2023-01-04 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 486390.
python3kgae added a comment.

Add unit test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

Files:
  llvm/lib/Target/DirectX/CBufferDataLayout.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.h
  llvm/lib/Target/DirectX/CMakeLists.txt
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/cbuf.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_0.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_1.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
  llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
  llvm/unittests/Target/DirectX/CMakeLists.txt

Index: llvm/unittests/Target/DirectX/CMakeLists.txt
===
--- llvm/unittests/Target/DirectX/CMakeLists.txt
+++ llvm/unittests/Target/DirectX/CMakeLists.txt
@@ -11,5 +11,6 @@
 )
 
 add_llvm_target_unittest(DirectXTests
+  CBufferDataLayoutTests.cpp
   PointerTypeAnalysisTests.cpp
   )
Index: llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
===
--- /dev/null
+++ llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp
@@ -0,0 +1,155 @@
+//===- llvm/unittests/Target/DirectX/CBufferDataLayoutTests.cpp ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+
+#include "CBufferDataLayout.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Type.h"
+#include "llvm/IR/DataLayout.h"
+
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using ::testing::Contains;
+using ::testing::Pair;
+
+using namespace llvm;
+using namespace llvm::dxil;
+
+void checkLegacyLayout(CBufferDataLayout , Type *T16, Type *T32,
+   Type *T64) {
+  // Basic types.
+  EXPECT_EQ(2ULL, CBDL.getTypeAllocSizeInBytes(T16).getFixedSize());
+  EXPECT_EQ(4ULL, CBDL.getTypeAllocSizeInBytes(T32).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T64).getFixedSize());
+  // Vector types.
+  Type *T16V2 = FixedVectorType::get(T16, 2);
+  Type *T32V2 = FixedVectorType::get(T32, 2);
+  Type *T64V2 = FixedVectorType::get(T64, 2);
+  Type *T16V3 = FixedVectorType::get(T16, 3);
+  Type *T32V3 = FixedVectorType::get(T32, 3);
+  Type *T64V3 = FixedVectorType::get(T64, 3);
+  Type *T16V4 = FixedVectorType::get(T16, 4);
+  Type *T32V4 = FixedVectorType::get(T32, 4);
+  Type *T64V4 = FixedVectorType::get(T64, 4);
+  EXPECT_EQ(4ULL, CBDL.getTypeAllocSizeInBytes(T16V2).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T32V2).getFixedSize());
+  EXPECT_EQ(16ULL, CBDL.getTypeAllocSizeInBytes(T64V2).getFixedSize());
+  EXPECT_EQ(6ULL, CBDL.getTypeAllocSizeInBytes(T16V3).getFixedSize());
+  EXPECT_EQ(12ULL, CBDL.getTypeAllocSizeInBytes(T32V3).getFixedSize());
+  EXPECT_EQ(24ULL, CBDL.getTypeAllocSizeInBytes(T64V3).getFixedSize());
+  EXPECT_EQ(8ULL, CBDL.getTypeAllocSizeInBytes(T16V4).getFixedSize());
+  EXPECT_EQ(16ULL, CBDL.getTypeAllocSizeInBytes(T32V4).getFixedSize());
+  EXPECT_EQ(32ULL, CBDL.getTypeAllocSizeInBytes(T64V4).getFixedSize());
+
+  // Array types.
+
+  ArrayType *T16A3 = ArrayType::get(T16, 3);
+  ArrayType *T32A3 = ArrayType::get(T32, 3);
+  ArrayType *T64A3 = ArrayType::get(T64, 3);
+
+  EXPECT_EQ(34ULL, CBDL.getTypeAllocSizeInBytes(T16A3).getFixedSize());
+  EXPECT_EQ(36ULL, CBDL.getTypeAllocSizeInBytes(T32A3).getFixedSize());
+  EXPECT_EQ(40ULL, CBDL.getTypeAllocSizeInBytes(T64A3).getFixedSize());
+
+  ArrayType *T16V3A3 = ArrayType::get(T16V3, 3);
+  ArrayType *T32V3A3 = ArrayType::get(T32V3, 3);
+  ArrayType *T64V3A3 = ArrayType::get(T64V3, 3);
+
+  EXPECT_EQ(38ULL, CBDL.getTypeAllocSizeInBytes(T16V3A3).getFixedSize());
+  EXPECT_EQ(44ULL, CBDL.getTypeAllocSizeInBytes(T32V3A3).getFixedSize());
+  EXPECT_EQ(88ULL, CBDL.getTypeAllocSizeInBytes(T64V3A3).getFixedSize());
+
+  ArrayType *T16V3A3A3 = ArrayType::get(T16V3A3, 3);
+  ArrayType *T32V3A3A3 = ArrayType::get(T32V3A3, 3);
+  ArrayType *T64V3A3A3 = ArrayType::get(T64V3A3, 3);
+
+  EXPECT_EQ((48 * 2 + 38ULL),
+CBDL.getTypeAllocSizeInBytes(T16V3A3A3).getFixedSize());
+  EXPECT_EQ((48 * 2 + 44ULL),
+CBDL.getTypeAllocSizeInBytes(T32V3A3A3).getFixedSize());
+  EXPECT_EQ((96 * 2 + 88ULL),
+CBDL.getTypeAllocSizeInBytes(T64V3A3A3).getFixedSize());
+
+  // Struct types.
+  StructType *BasicMix0 = StructType::get(T16, T32, T64);
+  StructType *BasicMix1 = StructType::get(T16, T64, T32);
+  StructType *BasicMix2 = StructType::get(T32, T64, T16);
+  StructType *BasicMix3 = StructType::get(T32, T16, T64);

[PATCH] D140992: clang: Add __builtin_elementwise_fma

2023-01-04 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

Need update clang/docs/ReleaseNotes.rst for new intrinsic.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D140992/new/

https://reviews.llvm.org/D140992

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


[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2023-01-03 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 486070.
python3kgae added a comment.

Use llvm::TypeSize and uint32_t instead of unsigned.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

Files:
  llvm/lib/Target/DirectX/CBufferDataLayout.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.h
  llvm/lib/Target/DirectX/CMakeLists.txt
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/cbuf.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_0.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_1.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll

Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
@@ -0,0 +1,81 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer D
+; {
+;
+;   struct D
+;   {
+;
+;   int D0;   ; Offset:0
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:   16
+;   float3 B1;; Offset:   32
+;   float B2; ; Offset:   44
+;   double3 B3;   ; Offset:   48
+;   half B4;  ; Offset:   72
+;   double2 B5;   ; Offset:   80
+;   float B6; ; Offset:   96
+;   half3 B7; ; Offset:  100
+;   half3 B8; ; Offset:  106
+;   
+;   } D1; ; Offset:   16
+;
+;   half D2;  ; Offset:  112
+;   struct struct.C
+;   {
+;
+;   struct struct.A
+;   {
+;
+;   float A0; ; Offset:  128
+;   double A1;; Offset:  136
+;   float A2; ; Offset:  144
+;   half A3;  ; Offset:  148
+;   int16_t A4;   ; Offset:  150
+;   int64_t A5;   ; Offset:  152
+;   int A6;   ; Offset:  160
+;   
+;   } C0; ; Offset:  128
+;
+;   float C1[1];  ; Offset:  176
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:  192
+;   float3 B1;; Offset:  208
+;   float B2; ; Offset:  220
+;   double3 B3;   ; Offset:  224
+;   half B4;  ; Offset:  248
+;   double2 B5;   ; Offset:  256
+;   float B6; ; Offset:  272
+;   half3 B7; ; Offset:  276
+;   half3 B8; ; Offset:  282
+;   
+;   } C2[2];; ; Offset:  192
+;
+;   half C3;  ; Offset:  384
+;   
+;   } D3; ; Offset:  128
+;
+;   double D4;; Offset:  392
+;   
+;   } D;  ; Offset:0 Size:   400
+
+
+; Make sure the size is 400
+; DXILMD:!{i32 0, ptr @D.cb., !"", i32 0, i32 1, i32 1, i32 400}
+
+
+%struct.B = type <{ double, <3 x float>, float, <3 x double>, half, <2 x double>, float, <3 x half>, <3 x half> }>
+%struct.C = type <{ %struct.A, [1 x float], [2 x %struct.B], half }>
+%struct.A = type <{ float, double, float, half, i16, i64, i32 }>
+
+@D.cb. = external local_unnamed_addr constant { i32, %struct.B, half, %struct.C, double }
+
+!hlsl.cbufs = !{!0}
+!0 = !{ptr @D.cb., !"D.cb.ty", i32 13, i32 1, i32 0}
Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
@@ -0,0 +1,51 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer B
+; {
+;
+;   struct B
+;   {
+;
+;   double B0[2]; ; 

[PATCH] D139935: [NFC] [Doc] Fix example for AnnotateTypeDocs

2023-01-02 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

Happy new year and ping


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139935/new/

https://reviews.llvm.org/D139935

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


[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2022-12-30 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 485747.
python3kgae added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

Files:
  llvm/lib/Target/DirectX/CBufferDataLayout.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.h
  llvm/lib/Target/DirectX/CMakeLists.txt
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/cbuf.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_0.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_1.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll

Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
@@ -0,0 +1,81 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer D
+; {
+;
+;   struct D
+;   {
+;
+;   int D0;   ; Offset:0
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:   16
+;   float3 B1;; Offset:   32
+;   float B2; ; Offset:   44
+;   double3 B3;   ; Offset:   48
+;   half B4;  ; Offset:   72
+;   double2 B5;   ; Offset:   80
+;   float B6; ; Offset:   96
+;   half3 B7; ; Offset:  100
+;   half3 B8; ; Offset:  106
+;   
+;   } D1; ; Offset:   16
+;
+;   half D2;  ; Offset:  112
+;   struct struct.C
+;   {
+;
+;   struct struct.A
+;   {
+;
+;   float A0; ; Offset:  128
+;   double A1;; Offset:  136
+;   float A2; ; Offset:  144
+;   half A3;  ; Offset:  148
+;   int16_t A4;   ; Offset:  150
+;   int64_t A5;   ; Offset:  152
+;   int A6;   ; Offset:  160
+;   
+;   } C0; ; Offset:  128
+;
+;   float C1[1];  ; Offset:  176
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:  192
+;   float3 B1;; Offset:  208
+;   float B2; ; Offset:  220
+;   double3 B3;   ; Offset:  224
+;   half B4;  ; Offset:  248
+;   double2 B5;   ; Offset:  256
+;   float B6; ; Offset:  272
+;   half3 B7; ; Offset:  276
+;   half3 B8; ; Offset:  282
+;   
+;   } C2[2];; ; Offset:  192
+;
+;   half C3;  ; Offset:  384
+;   
+;   } D3; ; Offset:  128
+;
+;   double D4;; Offset:  392
+;   
+;   } D;  ; Offset:0 Size:   400
+
+
+; Make sure the size is 400
+; DXILMD:!{i32 0, ptr @D.cb., !"", i32 0, i32 1, i32 1, i32 400}
+
+
+%struct.B = type <{ double, <3 x float>, float, <3 x double>, half, <2 x double>, float, <3 x half>, <3 x half> }>
+%struct.C = type <{ %struct.A, [1 x float], [2 x %struct.B], half }>
+%struct.A = type <{ float, double, float, half, i16, i64, i32 }>
+
+@D.cb. = external local_unnamed_addr constant { i32, %struct.B, half, %struct.C, double }
+
+!hlsl.cbufs = !{!0}
+!0 = !{ptr @D.cb., !"D.cb.ty", i32 13, i32 1, i32 0}
Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
@@ -0,0 +1,51 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer B
+; {
+;
+;   struct B
+;   {
+;
+;   double B0[2]; ; Offset:0
+;   float3 B1[3];

[PATCH] D139935: [NFC] [Doc] Fix example for AnnotateTypeDocs

2022-12-25 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

Merry Christmas and ping


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139935/new/

https://reviews.llvm.org/D139935

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


[PATCH] D136743: [HLSL] support ConstantBuffer

2022-12-15 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 483171.
python3kgae added a comment.
Herald added a reviewer: aaron.ballman.

Change CBV implementation to
template
using ConstantBuffer = T;

Added new internal attribute HLSLConstantBufferView to mark CBV with 
AttributedType.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136743/new/

https://reviews.llvm.org/D136743

Files:
  clang/include/clang/Basic/Attr.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Sema/HLSLExternalSemaSource.h
  clang/include/clang/Sema/Sema.h
  clang/lib/AST/TypePrinter.cpp
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/lib/Sema/SemaTemplate.cpp
  clang/test/AST/HLSL/CBV.hlsl
  clang/test/SemaHLSL/BuiltIns/CBV.hlsl

Index: clang/test/SemaHLSL/BuiltIns/CBV.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BuiltIns/CBV.hlsl
@@ -0,0 +1,5 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -verify %s
+
+// expected-error@+2{{'float' cannot be used as a type parameter where a struct is required}}
+// expected-note@+1{{in instantiation of template type alias 'ConstantBuffer' requested here}}
+ConstantBuffer CB;
Index: clang/test/AST/HLSL/CBV.hlsl
===
--- /dev/null
+++ clang/test/AST/HLSL/CBV.hlsl
@@ -0,0 +1,25 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -ast-dump %s | FileCheck %s
+
+// CHECK:TypeAliasTemplateDecl 0x{{[0-9a-f]+}} <>  implicit ConstantBuffer
+// CHECK-NEXT:-TemplateTypeParmDecl 0x[[T:[0-9a-f]+]] <>  class depth 0 index 0 element
+// CHECK-NEXT:-TypeAliasDecl 0x{{[0-9a-f]+}}  <>  implicit ConstantBuffer 'element  {{(.{2})}}hlsl::ConstantBufferView{{(.{2})}}':'element'
+// CHECK-NEXT:-AttributedType 0x{{[0-9a-f]+}} 'element {{(.{2})}}hlsl::ConstantBufferView{{(.{2})}}' sugar dependent
+// CHECK-NEXT: -TemplateTypeParmType 0x{{[0-9a-f]+}} 'element' dependent depth 0 index 0
+// CHECK-NEXT: -TemplateTypeParm 0x[[T]] 'element'
+
+// CHECK:-CXXRecordDecl 0x{{[0-9a-f]+}}  col:8 implicit struct S
+// CHECK-NEXT:-FieldDecl 0x[[A:[0-9a-f]+]]  col:11 referenced a 'float'
+struct S {
+float a;
+};
+
+// CHECK:VarDecl 0x[[CB:[0-9a-f]+]]  col:19 used CB 'ConstantBuffer':'S'
+ConstantBuffer CB;
+
+float foo() {
+// CHECK:ReturnStmt 0x{{[0-9a-f]+}} 
+// CHECK-NEXT:-ImplicitCastExpr 0x{{[0-9a-f]+}}  'float' 
+// CHECK-NEXT:-MemberExpr 0x{{[0-9a-f]+}}  'float' lvalue .a 0x[[A]]
+// CHECK-NEXT:-DeclRefExpr 0x{{[0-9a-f]+}}  'ConstantBuffer':'S' lvalue Var 0x[[CB]] 'CB' 'ConstantBuffer'
+return CB.a;
+}
Index: clang/lib/Sema/SemaTemplate.cpp
===
--- clang/lib/Sema/SemaTemplate.cpp
+++ clang/lib/Sema/SemaTemplate.cpp
@@ -3815,6 +3815,31 @@
   return { FailedCond, Description };
 }
 
+bool Sema::CheckHLSLConstantBufferView(TypeAliasDecl *Pattern,
+   TemplateArgumentListInfo ,
+   SourceLocation TemplateLoc) {
+  if (TemplateArgs.size() != 1)
+return true;
+  QualType PatType = Pattern->getUnderlyingType();
+  const auto *AttrTy = PatType->getAs();
+  if (!AttrTy)
+return true;
+
+  if (AttrTy->getAttrKind() != attr::HLSLConstantBufferView)
+return true;
+  // Make sure ConstantBufferView element type is record.
+  const TemplateArgument  = TemplateArgs.arguments()[0].getArgument();
+  if (Arg.getKind() == TemplateArgument::ArgKind::Type) {
+const auto *RD = Arg.getAsType()->getAsCXXRecordDecl();
+if (!RD) {
+  Diag(TemplateLoc, diag::err_hlsl_typeintemplateargument_requires_struct)
+  << Arg.getAsType();
+  return false;
+}
+  }
+  return true;
+}
+
 QualType Sema::CheckTemplateIdType(TemplateName Name,
SourceLocation TemplateLoc,
TemplateArgumentListInfo ) {
@@ -3878,6 +3903,10 @@
 if (Inst.isInvalid())
   return QualType();
 
+if (getLangOpts().HLSL &&
+!CheckHLSLConstantBufferView(Pattern, TemplateArgs, TemplateLoc))
+  return QualType();
+
 CanonType = SubstType(Pattern->getUnderlyingType(),
   TemplateArgLists, AliasTemplate->getLocation(),
   AliasTemplate->getDeclName());
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -462,14 +462,66 @@
   HLSLNamespace->addDecl(Template);
 }
 
+void HLSLExternalSemaSource::defineConstantBufferView() {
+  // Add CBV as
+  // template
+  // using ConstantBuffer = T;
+
+  // TypeAliasTemplateDecl ConstantBuf
+  //| |-TemplateTypeParmDecl  referenced typename depth 0 index 0 T
+  //| `- TypeAliasDecl ConstantBuf 'T'
+  //|   `- TemplateTypeParmType 

[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2022-12-13 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 482620.
python3kgae added a comment.

Rebase and remove the counter in resource metadata to match clang change.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

Files:
  llvm/lib/Target/DirectX/CBufferDataLayout.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.h
  llvm/lib/Target/DirectX/CMakeLists.txt
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/cbuf.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_0.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_1.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll

Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
@@ -0,0 +1,81 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer D
+; {
+;
+;   struct D
+;   {
+;
+;   int D0;   ; Offset:0
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:   16
+;   float3 B1;; Offset:   32
+;   float B2; ; Offset:   44
+;   double3 B3;   ; Offset:   48
+;   half B4;  ; Offset:   72
+;   double2 B5;   ; Offset:   80
+;   float B6; ; Offset:   96
+;   half3 B7; ; Offset:  100
+;   half3 B8; ; Offset:  106
+;   
+;   } D1; ; Offset:   16
+;
+;   half D2;  ; Offset:  112
+;   struct struct.C
+;   {
+;
+;   struct struct.A
+;   {
+;
+;   float A0; ; Offset:  128
+;   double A1;; Offset:  136
+;   float A2; ; Offset:  144
+;   half A3;  ; Offset:  148
+;   int16_t A4;   ; Offset:  150
+;   int64_t A5;   ; Offset:  152
+;   int A6;   ; Offset:  160
+;   
+;   } C0; ; Offset:  128
+;
+;   float C1[1];  ; Offset:  176
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:  192
+;   float3 B1;; Offset:  208
+;   float B2; ; Offset:  220
+;   double3 B3;   ; Offset:  224
+;   half B4;  ; Offset:  248
+;   double2 B5;   ; Offset:  256
+;   float B6; ; Offset:  272
+;   half3 B7; ; Offset:  276
+;   half3 B8; ; Offset:  282
+;   
+;   } C2[2];; ; Offset:  192
+;
+;   half C3;  ; Offset:  384
+;   
+;   } D3; ; Offset:  128
+;
+;   double D4;; Offset:  392
+;   
+;   } D;  ; Offset:0 Size:   400
+
+
+; Make sure the size is 400
+; DXILMD:!{i32 0, ptr @D.cb., !"", i32 0, i32 1, i32 1, i32 400}
+
+
+%struct.B = type <{ double, <3 x float>, float, <3 x double>, half, <2 x double>, float, <3 x half>, <3 x half> }>
+%struct.C = type <{ %struct.A, [1 x float], [2 x %struct.B], half }>
+%struct.A = type <{ float, double, float, half, i16, i64, i32 }>
+
+@D.cb. = external local_unnamed_addr constant { i32, %struct.B, half, %struct.C, double }
+
+!hlsl.cbufs = !{!0}
+!0 = !{ptr @D.cb., !"D.cb.ty", i32 13, i32 1, i32 0}
Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
@@ -0,0 +1,51 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer B
+; {
+;
+;   struct B
+;   {
+;
+;   double B0[2];   

[PATCH] D139935: [NFC] [Doc] Fix example for AnnotateTypeDocs

2022-12-13 Thread Xiang Li via Phabricator via cfe-commits
python3kgae created this revision.
python3kgae added reviewers: mboehme, aaron.ballman, erichkeane.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Change clang::annotate into clang::annotate_type.

The example will get error like
error: 'annotate' attribute cannot be applied to types
int* [[clang::annotate("category1", "foo", 1)]] 
f(int[[clang::annotate("category2")]] *);


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D139935

Files:
  clang/include/clang/Basic/AttrDocs.td


Index: clang/include/clang/Basic/AttrDocs.td
===
--- clang/include/clang/Basic/AttrDocs.td
+++ clang/include/clang/Basic/AttrDocs.td
@@ -6679,7 +6679,7 @@
 
 .. code-block:: c++
 
-  int* [[clang::annotate("category1", "foo", 1)]] 
f(int[[clang::annotate("category2")]] *);
+  int* [[clang::annotate_type("category1", "foo", 1)]] 
f(int[[clang::annotate_type("category2")]] *);
 
 The attribute does not have any effect on the semantics of the type system,
 neither type checking rules, nor runtime semantics. In particular:


Index: clang/include/clang/Basic/AttrDocs.td
===
--- clang/include/clang/Basic/AttrDocs.td
+++ clang/include/clang/Basic/AttrDocs.td
@@ -6679,7 +6679,7 @@
 
 .. code-block:: c++
 
-  int* [[clang::annotate("category1", "foo", 1)]] f(int[[clang::annotate("category2")]] *);
+  int* [[clang::annotate_type("category1", "foo", 1)]] f(int[[clang::annotate_type("category2")]] *);
 
 The attribute does not have any effect on the semantics of the type system,
 neither type checking rules, nor runtime semantics. In particular:
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D136743: [HLSL] support ConstantBuffer

2022-12-10 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 481861.
python3kgae added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136743/new/

https://reviews.llvm.org/D136743

Files:
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/test/AST/HLSL/CBV.hlsl
  clang/test/SemaHLSL/BuiltIns/CBV.hlsl

Index: clang/test/SemaHLSL/BuiltIns/CBV.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BuiltIns/CBV.hlsl
@@ -0,0 +1,8 @@
+// RUN: not %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -verify %s 2>&1 | FileCheck %s
+
+// CHECK:error: 'error' diagnostics seen but not expected:
+// CHECK-NEXT:  (frontend): base specifier must name a class
+// CHECK:1 error generated
+
+// expected-note@+1 {{in instantiation of template class 'hlsl::ConstantBuffer' requested here}}
+ConstantBuffer CB;
Index: clang/test/AST/HLSL/CBV.hlsl
===
--- /dev/null
+++ clang/test/AST/HLSL/CBV.hlsl
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -ast-dump %s | FileCheck %s
+
+// CHECK:-ClassTemplateDecl 0x{{[0-9a-f]+}} <>  implicit ConstantBuffer
+// CHECK-NEXT:-TemplateTypeParmDecl 0x{{[0-9a-f]+}} <>  class depth 0 index 0 element_type
+// CHECK-NEXT:-CXXRecordDecl 0x{{[0-9a-f]+}} <>  implicit class ConstantBuffer definition
+// CHECK:-public 'element_type'
+// CHECK-NEXT:-FinalAttr 0x{{[0-9a-f]+}} <> Implicit final
+// CHECK-NEXT:-HLSLResourceAttr 0x{{[0-9a-f]+}} <> Implicit CBuffer CBufferKind
+
+// CHECK:-CXXRecordDecl 0x{{[0-9a-f]+}}  col:8 implicit struct S
+// CHECK-NEXT:-FieldDecl 0x[[A:[0-9a-f]+]]  col:11 referenced a 'float'
+struct S {
+float a;
+};
+
+// CHECK:VarDecl 0x[[CB:[0-9a-f]+]]  col:19 used CB 'ConstantBuffer':'hlsl::ConstantBuffer'
+ConstantBuffer CB;
+
+float foo() {
+// CHECK:ReturnStmt 0x{{[0-9a-f]+}} 
+// CHECK-NEXT:-ImplicitCastExpr 0x{{[0-9a-f]+}}  'float' 
+// CHECK-NEXT:-MemberExpr 0x{{[0-9a-f]+}}  'float' lvalue .a 0x[[A]]
+// CHECK-NEXT:-ImplicitCastExpr 0x{{[0-9a-f]+}}  'S' lvalue 
+// CHECK-NEXT:-DeclRefExpr 0x{{[0-9a-f]+}}  'ConstantBuffer':'hlsl::ConstantBuffer' lvalue Var 0x[[CB]] 'CB' 'ConstantBuffer':'hlsl::ConstantBuffer'
+return CB.a;
+}
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -34,6 +34,7 @@
   ClassTemplateDecl *PrevTemplate = nullptr;
   NamespaceDecl *HLSLNamespace = nullptr;
   llvm::StringMap Fields;
+  llvm::SmallVector Bases;
 
   BuiltinTypeDeclBuilder(CXXRecordDecl *R) : Record(R) {
 Record->startDefinition();
@@ -306,6 +307,30 @@
 return *this;
   }
 
+  BuiltinTypeDeclBuilder (TypeDecl *Parent) {
+if (Record->isCompleteDefinition())
+  return *this;
+TypeSourceInfo *TInfo =
+HLSLNamespace->getASTContext().getTrivialTypeSourceInfo(
+QualType(Parent->getTypeForDecl(), 0));
+CXXBaseSpecifier Base(SourceRange(), false, false,
+  AccessSpecifier::AS_public, TInfo, SourceLocation());
+Bases.emplace_back(Base);
+return *this;
+  }
+
+  BuiltinTypeDeclBuilder () {
+if (Record->isCompleteDefinition())
+  return *this;
+
+llvm::SmallVector BasesData;
+for (auto  : Bases)
+  BasesData.emplace_back();
+Record->setBases(BasesData.data(), BasesData.size());
+Bases.clear();
+return *this;
+  }
+
   TemplateParameterListBuilder addTemplateArgumentList();
 };
 
@@ -336,6 +361,13 @@
 return *this;
   }
 
+  TemplateParameterListBuilder (uint32_t I) {
+if (Params.size() <= I)
+  return *this;
+Builder.addBase(cast(Params[I]));
+return *this;
+  }
+
   BuiltinTypeDeclBuilder () {
 if (Params.empty())
   return Builder;
@@ -466,6 +498,20 @@
  .addHandleMember(AccessSpecifier::AS_public)
  .completeDefinition()
  .Record;
+  // Add CBV as
+  // template
+  // struct ConstantBuffer : T {
+  // };
+  BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace, "ConstantBuffer")
+  .startDefinition()
+  .addTemplateArgumentList()
+  .addTypeParameter("element_type")
+  .addTypeParameterAsBase(0)
+  .finalizeTemplateArgs()
+  .setBases()
+  .annotateResourceClass(HLSLResourceAttr::CBuffer,
+ HLSLResourceAttr::CBufferKind)
+  .completeDefinition();
 }
 
 void HLSLExternalSemaSource::forwardDeclareHLSLTypes() {
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D136913: [HLSL] support RWByteAddressBuffer.

2022-12-10 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 481858.
python3kgae added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136913/new/

https://reviews.llvm.org/D136913

Files:
  clang/include/clang/Sema/HLSLExternalSemaSource.h
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/lib/Sema/SemaExpr.cpp
  clang/lib/Sema/SemaExprMember.cpp
  clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
  clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl

Index: clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -fsyntax-only -verify %s
+
+typedef vector float3;
+
+RWByteAddressBuffer Buffer;
+
+[numthreads(1,1,1)]
+void main() {
+  (void)Buffer.h; // expected-error {{'h' is a private member of 'hlsl::RWByteAddressBuffer'}}
+  // expected-note@* {{implicitly declared private here}}
+  Buffer.Load(0);
+}
Index: clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
===
--- /dev/null
+++ clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
@@ -0,0 +1,104 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -fsyntax-only -ast-dump %s | FileCheck %s
+
+RWByteAddressBuffer U;
+typedef unsigned int uint;
+typedef vector float2;
+
+// CHECK:CXXRecordDecl 0x{{[0-9a-f]+}} <>  implicit referenced  class RWByteAddressBuffer definition
+// CHECK:FinalAttr 0x{{[0-9a-f]+}} <> Implicit final
+// CHECK-NEXT:HLSLResourceAttr 0x{{[0-9a-f]+}} <> Implicit UAV RawBuffer
+// CHECK-NEXT:-FieldDecl 0x[[HDL:[0-9a-f]+]] <>  implicit referenced h 'void *'
+// CHECK-NEXT:CXXConstructorDecl 0x{{[0-9a-f]+}} <>  used RWByteAddressBuffer 'void ()' inline
+// CHECK-NEXT:CompoundStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:BinaryOperator 0x{{[0-9a-f]+}} <> 'void *' lvalue '='
+// CHECK-NEXT:MemberExpr 0x{{[0-9a-f]+}} <> 'void *' lvalue ->h 0x[[HDL]]
+// CHECK-NEXT:-CXXThisExpr 0x{{[0-9a-f]+}} <> 'hlsl::RWByteAddressBuffer *' implicit this
+// CHECK-NEXT:CallExpr 0x{{[0-9a-f]+}} <> 'void *'
+// CHECK-NEXT:-DeclRefExpr 0x{{[0-9a-f]+}} <> 'void *(unsigned char) throw()' Function 0x{{[0-9a-f]+}} '__builtin_hlsl_create_handle' 'void *(unsigned char) throw()'
+// CHECK-NEXT:-IntegerLiteral 0x{{[0-9a-f]+}} <> 'unsigned char' 1
+// CHECK-NEXT:FunctionTemplateDecl 0x{{[0-9a-f]+}} <>  Load
+// CHECK-NEXT:TemplateTypeParmDecl 0x{{[0-9a-f]+}} <>  class depth 0 index 0 T
+// CHECK-NEXT:CXXMethodDecl 0x{{[0-9a-f]+}} <>  Load 'T (unsigned int)'
+// CHECK-NEXT:ParmVarDecl 0x[[LOAD_PARAM:[0-9a-f]+]] <>  ByteAddress 'unsigned int'
+// CHECK-NEXT:CompoundStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:ReturnStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:ImplicitCastExpr 0x{{[0-9a-f]+}} <> 'T' 
+// CHECK-NEXT:UnaryOperator 0x{{[0-9a-f]+}} <> 'T' lvalue prefix '*' cannot overflow
+// CHECK-NEXT:CStyleCastExpr 0x{{[0-9a-f]+}} <> 'T *' lvalue 
+// CHECK-NEXT:inaryOperator 0x{{[0-9a-f]+}} <> 'unsigned char *' '+'
+// CHECK-NEXT:ImplicitCastExpr 0x{{[0-9a-f]+}} <> 'unsigned char *' 
+// CHECK-NEXT:CStyleCastExpr 0x{{[0-9a-f]+}} <> 'unsigned char *' lvalue 
+// CHECK-NEXT:MemberExpr 0x{{[0-9a-f]+}} <> 'void *' lvalue ->h 0x[[HDL]]
+// CHECK-NEXT:CXXThisExpr 0x{{[0-9a-f]+}} <> 'hlsl::RWByteAddressBuffer *' implicit this
+// CHECK-NEXT:DeclRefExpr 0x{{[0-9a-f]+}} <> 'unsigned int' ParmVar 0x[[LOAD_PARAM]] 'ByteAddress' 'unsigned int'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_F:[0-9a-f]+]] <>  used Load 'float (unsigned int)'
+// CHECK-NEXT:TemplateArgument type 'float'
+// CHECK-NEXT:BuiltinType 0x{{[0-9a-f]+}} 'float'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_F2:[0-9a-f]+]] <>  used Load 'float (unsigned int) __attribute__((ext_vector_type(2)))'
+// CHECK-NEXT:TemplateArgument type 'float __attribute__((ext_vector_type(2)))'
+// CHECK-NEXT:ExtVectorType 0x{{[0-9a-f]+}} 'float __attribute__((ext_vector_type(2)))' 2
+// CHECK-NEXT:BuiltinType 0x{{[0-9a-f]+}} 'float'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_S:[0-9a-f]+]] <>  used Load 'S (unsigned int)'
+// CHECK-NEXT:TemplateArgument type 'S'
+// CHECK-NEXT:-RecordType 0x{{[0-9a-f]+}} 'S'
+// CHECK-NEXT:CXXRecord 0x[[RECORD:[0-9a-f]+]] 'S'
+
+// CHECK:VarDecl 0x[[BUF:[0-9a-f]+]] <{{.+}}:1, col:21> col:21 used U 'RWByteAddressBuffer':'hlsl::RWByteAddressBuffer'
+
+// CHECK:FunctionDecl 0x{{[0-9a-f]+}}  line:{{[0-9]+}}:7 foo 'float (uint)'
+// CHECK-NEXT:ParmVarDecl 0x[[FOO_PARAM:[0-9a-f]+]]  col:16 used i 'uint':'unsigned int'
+// CHECK-NEXT:CompoundStmt 0x{{[0-9a-f]+}} 
+// CHECK-NEXT:ReturnStmt 0x{{[0-9a-f]+}} 
+// CHECK-NEXT:CXXMemberCallExpr 0x{{[0-9a-f]+}}  'float':'float'
+// CHECK-NEXT:MemberExpr 0x{{[0-9a-f]+}}  '' .Load 0x[[LOAD_F]]
+// CHECK-NEXT:DeclRefExpr 0x{{[0-9a-f]+}}  'RWByteAddressBuffer':'hlsl::RWByteAddressBuffer' lvalue Var 0x[[BUF]] 'U' 'RWByteAddressBuffer':'hlsl::RWByteAddressBuffer'
+// 

[PATCH] D139742: [HLSL] Add trunc library function

2022-12-09 Thread Xiang Li via Phabricator via cfe-commits
python3kgae accepted this revision.
python3kgae added a comment.
This revision is now accepted and ready to land.

LGTM.
Remember to double check the commit message updated to trunc too.

Just noticed we don't have double trunc(double) for hlsl now (hlsl 2021). Need 
make sure to generate float overload DXIL on older shader model when parameter 
is double in hlsl.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139742/new/

https://reviews.llvm.org/D139742

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


[PATCH] D139742: [HLSL] Add acos library function

2022-12-09 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

The PR title is acos but trunc is added.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D139742/new/

https://reviews.llvm.org/D139742

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


[PATCH] D138161: [HLSL] add sin library function

2022-11-16 Thread Xiang Li via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG083d949f3800: [HLSL] add sin library function (authored by 
bob80905, committed by python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138161/new/

https://reviews.llvm.org/D138161

Files:
  clang/lib/Headers/hlsl/hlsl_intrinsics.h
  clang/test/CodeGenHLSL/builtins/sin.hlsl


Index: clang/test/CodeGenHLSL/builtins/sin.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/builtins/sin.hlsl
@@ -0,0 +1,56 @@
+// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -fnative-half-type \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \
+// RUN:   -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF
+
+// CHECK: define noundef half @
+// CHECK: call half @llvm.sin.f16(
+// NO_HALF: define noundef float @"?test_sin_half@@YA$halff@$halff@@Z"(
+// NO_HALF: call float @llvm.sin.f32(
+half test_sin_half ( half p0 ) {
+  return sin ( p0 );
+}
+// CHECK: define noundef <2 x half> @
+// CHECK: call <2 x half> @llvm.sin.v2f16
+// NO_HALF: define noundef <2 x float> 
@"?test_sin_float2@@YAT?$__vector@M$01@__clang@@T12@@Z"(
+// NO_HALF: call <2 x float> @llvm.sin.v2f32(
+half2 test_sin_half2 ( half2 p0 ) {
+  return sin ( p0 );
+}
+// CHECK: define noundef <3 x half> @
+// CHECK: call <3 x half> @llvm.sin.v3f16
+// NO_HALF: define noundef <3 x float> 
@"?test_sin_float3@@YAT?$__vector@M$02@__clang@@T12@@Z"(
+// NO_HALF: call <3 x float> @llvm.sin.v3f32(
+half3 test_sin_half3 ( half3 p0 ) {
+  return sin ( p0 );
+}
+// CHECK: define noundef <4 x half> @
+// CHECK: call <4 x half> @llvm.sin.v4f16
+// NO_HALF: define noundef <4 x float> 
@"?test_sin_float4@@YAT?$__vector@M$03@__clang@@T12@@Z"(
+// NO_HALF: call <4 x float> @llvm.sin.v4f32(
+half4 test_sin_half4 ( half4 p0 ) {
+  return sin ( p0 );
+}
+
+// CHECK: define noundef float @
+// CHECK: call float @llvm.sin.f32(
+float test_sin_float ( float p0 ) {
+  return sin ( p0 );
+}
+// CHECK: define noundef <2 x float> @
+// CHECK: call <2 x float> @llvm.sin.v2f32
+float2 test_sin_float2 ( float2 p0 ) {
+  return sin ( p0 );
+}
+// CHECK: define noundef <3 x float> @
+// CHECK: call <3 x float> @llvm.sin.v3f32
+float3 test_sin_float3 ( float3 p0 ) {
+  return sin ( p0 );
+}
+// CHECK: define noundef <4 x float> @
+// CHECK: call <4 x float> @llvm.sin.v4f32
+float4 test_sin_float4 ( float4 p0 ) {
+  return sin ( p0 );
+}
Index: clang/lib/Headers/hlsl/hlsl_intrinsics.h
===
--- clang/lib/Headers/hlsl/hlsl_intrinsics.h
+++ clang/lib/Headers/hlsl/hlsl_intrinsics.h
@@ -130,5 +130,34 @@
 __attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
 double4 cos(double4);
 
+// sin builtins
+#ifdef __HLSL_ENABLE_16_BIT
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin))) half sin(half);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+half2 sin(half2);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+half3 sin(half3);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+half4 sin(half4);
+#endif
+
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin))) float
+sin(float);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+float2 sin(float2);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+float3 sin(float3);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+float4 sin(float4);
+
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin))) double
+sin(double);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+double2 sin(double2);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+double3 sin(double3);
+__attribute__((clang_builtin_alias(__builtin_elementwise_sin)))
+double4 sin(double4);
+
 } // namespace hlsl
 #endif //_HLSL_HLSL_INTRINSICS_H_


Index: clang/test/CodeGenHLSL/builtins/sin.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/builtins/sin.hlsl
@@ -0,0 +1,56 @@
+// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -fnative-half-type \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \
+// RUN:   -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF
+
+// CHECK: define noundef half @
+// CHECK: call half @llvm.sin.f16(
+// NO_HALF: define noundef float @"?test_sin_half@@YA$halff@$halff@@Z"(
+// 

[PATCH] D134921: [HLSL] add cos library function

2022-11-16 Thread Xiang Li via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG9777e98a610f: [HLSL] add cos library function (authored by 
bob80905, committed by python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134921/new/

https://reviews.llvm.org/D134921

Files:
  clang/lib/Headers/hlsl/hlsl_intrinsics.h
  clang/test/CodeGenHLSL/builtins/cos.hlsl

Index: clang/test/CodeGenHLSL/builtins/cos.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/builtins/cos.hlsl
@@ -0,0 +1,56 @@
+// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -fnative-half-type \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \
+// RUN:   -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF
+
+// CHECK: define noundef half @
+// CHECK: call half @llvm.cos.f16(
+// NO_HALF: define noundef float @"?test_cos_half@@YA$halff@$halff@@Z"(
+// NO_HALF: call float @llvm.cos.f32(
+half test_cos_half ( half p0 ) {
+  return cos ( p0 );
+}
+// CHECK: define noundef <2 x half> @
+// CHECK: call <2 x half> @llvm.cos.v2f16
+// NO_HALF: define noundef <2 x float> @"?test_cos_float2@@YAT?$__vector@M$01@__clang@@T12@@Z"(
+// NO_HALF: call <2 x float> @llvm.cos.v2f32(
+half2 test_cos_half2 ( half2 p0 ) {
+  return cos ( p0 );
+}
+// CHECK: define noundef <3 x half> @
+// CHECK: call <3 x half> @llvm.cos.v3f16
+// NO_HALF: define noundef <3 x float> @"?test_cos_float3@@YAT?$__vector@M$02@__clang@@T12@@Z"(
+// NO_HALF: call <3 x float> @llvm.cos.v3f32(
+half3 test_cos_half3 ( half3 p0 ) {
+  return cos ( p0 );
+}
+// CHECK: define noundef <4 x half> @
+// CHECK: call <4 x half> @llvm.cos.v4f16
+// NO_HALF: define noundef <4 x float> @"?test_cos_float4@@YAT?$__vector@M$03@__clang@@T12@@Z"(
+// NO_HALF: call <4 x float> @llvm.cos.v4f32(
+half4 test_cos_half4 ( half4 p0 ) {
+  return cos ( p0 );
+}
+
+// CHECK: define noundef float @
+// CHECK: call float @llvm.cos.f32(
+float test_cos_float ( float p0 ) {
+  return cos ( p0 );
+}
+// CHECK: define noundef <2 x float> @
+// CHECK: call <2 x float> @llvm.cos.v2f32
+float2 test_cos_float2 ( float2 p0 ) {
+  return cos ( p0 );
+}
+// CHECK: define noundef <3 x float> @
+// CHECK: call <3 x float> @llvm.cos.v3f32
+float3 test_cos_float3 ( float3 p0 ) {
+  return cos ( p0 );
+}
+// CHECK: define noundef <4 x float> @
+// CHECK: call <4 x float> @llvm.cos.v4f32
+float4 test_cos_float4 ( float4 p0 ) {
+  return cos ( p0 );
+}
Index: clang/lib/Headers/hlsl/hlsl_intrinsics.h
===
--- clang/lib/Headers/hlsl/hlsl_intrinsics.h
+++ clang/lib/Headers/hlsl/hlsl_intrinsics.h
@@ -101,6 +101,34 @@
 __attribute__((clang_builtin_alias(__builtin_elementwise_ceil)))
 double4 ceil(double4);
 
-} // namespace hlsl
+// cos builtins
+#ifdef __HLSL_ENABLE_16_BIT
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos))) half cos(half);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+half2 cos(half2);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+half3 cos(half3);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+half4 cos(half4);
+#endif
 
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos))) float
+cos(float);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+float2 cos(float2);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+float3 cos(float3);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+float4 cos(float4);
+
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos))) double
+cos(double);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+double2 cos(double2);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+double3 cos(double3);
+__attribute__((clang_builtin_alias(__builtin_elementwise_cos)))
+double4 cos(double4);
+
+} // namespace hlsl
 #endif //_HLSL_HLSL_INTRINSICS_H_
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D135011: Add builtin_elementwise_sin and builtin_elementwise_cos

2022-11-10 Thread Xiang Li via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa5d14f757bb1: Add builtin_elementwise_sin and 
builtin_elementwise_cos (authored by bob80905, committed by python3kgae).

Changed prior to commit:
  https://reviews.llvm.org/D135011?vs=474628=474667#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135011/new/

https://reviews.llvm.org/D135011

Files:
  clang/docs/LanguageExtensions.rst
  clang/docs/ReleaseNotes.rst
  clang/include/clang/Basic/Builtins.def
  clang/lib/CodeGen/CGBuiltin.cpp
  clang/lib/Sema/SemaChecking.cpp
  clang/test/CodeGen/builtins-elementwise-math.c
  clang/test/Sema/aarch64-sve-vector-trig-ops.c
  clang/test/Sema/builtins-elementwise-math.c
  clang/test/Sema/riscv-sve-vector-trig-ops.c
  clang/test/SemaCXX/builtins-elementwise-math.cpp

Index: clang/test/SemaCXX/builtins-elementwise-math.cpp
===
--- clang/test/SemaCXX/builtins-elementwise-math.cpp
+++ clang/test/SemaCXX/builtins-elementwise-math.cpp
@@ -59,3 +59,17 @@
   static_assert(!is_const::value);
   static_assert(!is_const::value);
 }
+
+void test_builtin_elementwise_cos() {
+  const float a = 42.0;
+  float b = 42.3;
+  static_assert(!is_const::value);
+  static_assert(!is_const::value);
+}
+
+void test_builtin_elementwise_sin() {
+  const float a = 42.0;
+  float b = 42.3;
+  static_assert(!is_const::value);
+  static_assert(!is_const::value);
+}
Index: clang/test/Sema/riscv-sve-vector-trig-ops.c
===
--- /dev/null
+++ clang/test/Sema/riscv-sve-vector-trig-ops.c
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -triple riscv64 -target-feature +f -target-feature +d \
+// RUN:   -target-feature +v -target-feature +zfh -target-feature +experimental-zvfh \
+// RUN:   -disable-O0-optnone -o - -fsyntax-only %s -verify 
+// REQUIRES: riscv-registered-target
+
+#include 
+
+
+vfloat32mf2_t test_sin_vv_i8mf8(vfloat32mf2_t v) {
+
+  return __builtin_elementwise_sin(v);
+  // expected-error@-1 {{1st argument must be a vector, integer or floating point type}}
+}
+
+vfloat32mf2_t test_cos_vv_i8mf8(vfloat32mf2_t v) {
+
+  return __builtin_elementwise_cos(v);
+  // expected-error@-1 {{1st argument must be a vector, integer or floating point type}}
+}
Index: clang/test/Sema/builtins-elementwise-math.c
===
--- clang/test/Sema/builtins-elementwise-math.c
+++ clang/test/Sema/builtins-elementwise-math.c
@@ -280,6 +280,27 @@
   // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}}
 }
 
+void test_builtin_elementwise_cos(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) {
+
+  struct Foo s = __builtin_elementwise_cos(f);
+  // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}}
+
+  i = __builtin_elementwise_cos();
+  // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
+
+  i = __builtin_elementwise_cos(i);
+  // expected-error@-1 {{1st argument must be a floating point type (was 'int')}}
+
+  i = __builtin_elementwise_cos(f, f);
+  // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
+
+  u = __builtin_elementwise_cos(u);
+  // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}}
+
+  uv = __builtin_elementwise_cos(uv);
+  // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}}
+}
+
 void test_builtin_elementwise_floor(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) {
 
   struct Foo s = __builtin_elementwise_floor(f);
@@ -322,6 +343,27 @@
   // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}}
 }
 
+void test_builtin_elementwise_sin(int i, float f, double d, float4 v, int3 iv, unsigned u, unsigned4 uv) {
+
+  struct Foo s = __builtin_elementwise_sin(f);
+  // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}}
+
+  i = __builtin_elementwise_sin();
+  // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
+
+  i = __builtin_elementwise_sin(i);
+  // expected-error@-1 {{1st argument must be a floating point type (was 'int')}}
+
+  i = __builtin_elementwise_sin(f, f);
+  // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
+
+  u = __builtin_elementwise_sin(u);
+  // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned int')}}
+
+  uv = __builtin_elementwise_sin(uv);
+  // expected-error@-1 {{1st argument must be a floating point type (was 'unsigned4' (vector of 4 'unsigned int' values))}}
+}
+
 void test_builtin_elementwise_trunc(int i, float f, double d, float4 v, int3 iv, unsigned u, 

[PATCH] D135011: Add builtin_elementwise_sin and builtin_elementwise_cos

2022-11-10 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/test/Sema/aarch64-sve-vector-trig-ops.c:4
+// RUN:   -disable-O0-optnone -o - -fsyntax-only %s -verify 
+
+#include 

Need limit to aarch64 enabled with
// REQUIRES: aarch64-registered-target



Comment at: clang/test/Sema/riscv-sve-vector-trig-ops.c:4
+// RUN:   -disable-O0-optnone -o - -fsyntax-only %s -verify 
+
+#include 

// REQUIRES: riscv-registered-target


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135011/new/

https://reviews.llvm.org/D135011

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


[PATCH] D135721: [HLSL] Added HLSL this as a reference

2022-11-07 Thread Xiang Li via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG86674f66cc78: [HLSL] Added HLSL this as a reference 
(authored by gracejennings, committed by python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135721/new/

https://reviews.llvm.org/D135721

Files:
  clang/lib/AST/ExprClassification.cpp
  clang/lib/CodeGen/CGExpr.cpp
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/lib/Sema/SemaDeclCXX.cpp
  clang/lib/Sema/SemaExpr.cpp
  clang/lib/Sema/SemaExprCXX.cpp
  clang/lib/Sema/SemaExprMember.cpp
  clang/test/AST/HLSL/RWBuffer-AST.hlsl
  clang/test/AST/HLSL/this-reference-template.hlsl
  clang/test/AST/HLSL/this-reference.hlsl
  clang/test/CodeGenHLSL/this-assignment-overload.hlsl
  clang/test/CodeGenHLSL/this-assignment.hlsl
  clang/test/CodeGenHLSL/this-reference.hlsl

Index: clang/test/CodeGenHLSL/this-reference.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/this-reference.hlsl
@@ -0,0 +1,28 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -emit-llvm -disable-llvm-passes -o - -hlsl-entry main %s | FileCheck %s
+
+struct Pair {
+  int First;
+  float Second;
+
+  int getFirst() {
+	  return this.First;
+  }
+
+  float getSecond() {
+return Second;
+  }
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+  Pair Vals = {1, 2.0};
+  Vals.First = Vals.getFirst();
+  Vals.Second = Vals.getSecond();
+}
+
+// This tests reference like `this` in HLSL
+  // CHECK:   %call = call noundef i32 @"?getFirst@Pair@@QAAHXZ"(ptr noundef nonnull align 4 dereferenceable(8) %Vals)
+  // CHECK-NEXT:  %First = getelementptr inbounds %struct.Pair, ptr %Vals, i32 0, i32 0
+  // CHECK-NEXT:  store i32 %call, ptr %First, align 4
+  // CHECK-NEXT:  %call1 = call noundef float @"?getSecond@Pair@@QAAMXZ"(ptr noundef nonnull align 4 dereferenceable(8) %Vals)
+  // CHECK-NEXT:  %Second = getelementptr inbounds %struct.Pair, ptr %Vals, i32 0, i32 1
Index: clang/test/CodeGenHLSL/this-assignment.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/this-assignment.hlsl
@@ -0,0 +1,45 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -emit-llvm -disable-llvm-passes -o - -hlsl-entry main %s | FileCheck %s
+
+struct Pair {
+  int First;
+  int Second;
+
+  int getFirst() {
+Pair Another = {5, 10};
+this = Another;
+	  return this.First;
+  }
+
+  int getSecond() {
+this = Pair();
+return Second;
+  }
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+  Pair Vals = {1, 2.0};
+  Vals.First = Vals.getFirst();
+  Vals.Second = Vals.getSecond();
+}
+
+// This tests reference like implicit this in HLSL
+// CHECK: define linkonce_odr noundef i32 @"?getFirst@Pair@@QAAHXZ"(ptr noundef nonnull align 4 dereferenceable(8) %this) #3 align 2 {
+// CHECK-NEXT:entry:
+// CHECK-NEXT:%this.addr = alloca ptr, align 4
+// CHECK-NEXT:%Another = alloca %struct.Pair, align 4
+// CHECK-NEXT:store ptr %this, ptr %this.addr, align 4
+// CHECK-NEXT:%this1 = load ptr, ptr %this.addr, align 4
+// CHECK-NEXT:call void @llvm.memcpy.p0.p0.i32(ptr align 4 %Another, ptr align 4 @"__const.?getFirst@Pair@@QAAHXZ.Another", i32 8, i1 false)
+// CHECK-NEXT:call void @llvm.memcpy.p0.p0.i32(ptr align 4 %this1, ptr align 4 %Another, i32 8, i1 false)
+// CHECK-NEXT:%First = getelementptr inbounds %struct.Pair, ptr %this1, i32 0, i32 0
+
+// CHECK: define linkonce_odr noundef i32 @"?getSecond@Pair@@QAAHXZ"(ptr noundef nonnull align 4 dereferenceable(8) %this) #3 align 2 {
+// CHECK-NEXT:entry:
+// CHECK-NEXT:%this.addr = alloca ptr, align 4
+// CHECK-NEXT:%ref.tmp = alloca %struct.Pair, align 4
+// CHECK-NEXT:store ptr %this, ptr %this.addr, align 4
+// CHECK-NEXT:%this1 = load ptr, ptr %this.addr, align 4
+// CHECK-NEXT:call void @llvm.memset.p0.i32(ptr align 4 %ref.tmp, i8 0, i32 8, i1 false)
+// CHECK-NEXT:call void @llvm.memcpy.p0.p0.i32(ptr align 4 %this1, ptr align 4 %ref.tmp, i32 8, i1 false)
+// CHECK-NEXT:%Second = getelementptr inbounds %struct.Pair, ptr %this1, i32 0, i32 1
Index: clang/test/CodeGenHLSL/this-assignment-overload.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/this-assignment-overload.hlsl
@@ -0,0 +1,55 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -emit-llvm -disable-llvm-passes -o - -std=hlsl202x %s | FileCheck %s
+
+struct Pair {
+  int First;
+  int Second;
+  int getFirst() {
+Pair Another = {5, 10};
+this = Another;
+  return this.First;
+  }
+  int getSecond() {
+this = Pair();
+return Second;
+  }
+  void operator=(Pair P) {
+First = P.First;
+Second = 2;
+  }
+};
+[numthreads(1, 1, 1)]
+void main() {
+  Pair Vals = {1, 2};
+  Vals.First = Vals.getFirst();
+  Vals.Second = Vals.getSecond();
+}
+
+// This test makes a probably safe assumption that HLSL 202x includes 

[PATCH] D136913: [HLSL] support RWByteAddressBuffer.

2022-10-27 Thread Xiang Li via Phabricator via cfe-commits
python3kgae created this revision.
python3kgae added reviewers: pow2clk, beanz, bogner.
Herald added a subscriber: Anastasia.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Only RWByteAddressBuffer::Load is supported in this PR.
Implement Load by cast handle to uint8_t ptr first.
Then add the byte address to get target address.
Cast the target address to target type ptr and deref.

struct RWByteAddressBuffer {

  void *handle;
  template Load(uint i) {
 return *((T*)(((uint8_t*)handle) + i));
  }

};

Allow ref/ptr use for HLSLExternalSemaSource to skip the check when Location is 
invalid.

Also add HLSLResourceHelper to share code for RWByteAddressBuffer and RWBuffer.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D136913

Files:
  clang/include/clang/Sema/HLSLExternalSemaSource.h
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/lib/Sema/SemaExpr.cpp
  clang/lib/Sema/SemaExprMember.cpp
  clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
  clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl

Index: clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BuiltIns/RWByteAddressBuffer.hlsl
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -fsyntax-only -verify %s
+
+typedef vector float3;
+
+RWByteAddressBuffer Buffer;
+
+[numthreads(1,1,1)]
+void main() {
+  (void)Buffer.h; // expected-error {{'h' is a private member of 'hlsl::RWByteAddressBuffer'}}
+  // expected-note@* {{implicitly declared private here}}
+  Buffer.Load(0);
+}
Index: clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
===
--- /dev/null
+++ clang/test/AST/HLSL/RWByteAddressBuffer.hlsl
@@ -0,0 +1,104 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -fsyntax-only -ast-dump %s | FileCheck %s
+
+RWByteAddressBuffer U;
+typedef unsigned int uint;
+typedef vector float2;
+
+// CHECK:CXXRecordDecl 0x{{[0-9a-f]+}} <>  implicit referenced  class RWByteAddressBuffer definition
+// CHECK:FinalAttr 0x{{[0-9a-f]+}} <> Implicit final
+// CHECK-NEXT:HLSLResourceAttr 0x{{[0-9a-f]+}} <> Implicit UAV RawBuffer
+// CHECK-NEXT:-FieldDecl 0x[[HDL:[0-9a-f]+]] <>  implicit referenced h 'void *'
+// CHECK-NEXT:CXXConstructorDecl 0x{{[0-9a-f]+}} <>  used RWByteAddressBuffer 'void ()' inline
+// CHECK-NEXT:CompoundStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:BinaryOperator 0x{{[0-9a-f]+}} <> 'void *' lvalue '='
+// CHECK-NEXT:MemberExpr 0x{{[0-9a-f]+}} <> 'void *' lvalue ->h 0x[[HDL]]
+// CHECK-NEXT:-CXXThisExpr 0x{{[0-9a-f]+}} <> 'hlsl::RWByteAddressBuffer *' implicit this
+// CHECK-NEXT:CallExpr 0x{{[0-9a-f]+}} <> 'void *'
+// CHECK-NEXT:-DeclRefExpr 0x{{[0-9a-f]+}} <> 'void *(unsigned char) throw()' Function 0x{{[0-9a-f]+}} '__builtin_hlsl_create_handle' 'void *(unsigned char) throw()'
+// CHECK-NEXT:-IntegerLiteral 0x{{[0-9a-f]+}} <> 'unsigned char' 1
+// CHECK-NEXT:FunctionTemplateDecl 0x{{[0-9a-f]+}} <>  Load
+// CHECK-NEXT:TemplateTypeParmDecl 0x{{[0-9a-f]+}} <>  class depth 0 index 0 T
+// CHECK-NEXT:CXXMethodDecl 0x{{[0-9a-f]+}} <>  Load 'T (unsigned int)'
+// CHECK-NEXT:ParmVarDecl 0x[[LOAD_PARAM:[0-9a-f]+]] <>  ByteAddress 'unsigned int'
+// CHECK-NEXT:CompoundStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:ReturnStmt 0x{{[0-9a-f]+}} <>
+// CHECK-NEXT:ImplicitCastExpr 0x{{[0-9a-f]+}} <> 'T' 
+// CHECK-NEXT:UnaryOperator 0x{{[0-9a-f]+}} <> 'T' lvalue prefix '*' cannot overflow
+// CHECK-NEXT:CStyleCastExpr 0x{{[0-9a-f]+}} <> 'T *' lvalue 
+// CHECK-NEXT:inaryOperator 0x{{[0-9a-f]+}} <> 'unsigned char *' '+'
+// CHECK-NEXT:ImplicitCastExpr 0x{{[0-9a-f]+}} <> 'unsigned char *' 
+// CHECK-NEXT:CStyleCastExpr 0x{{[0-9a-f]+}} <> 'unsigned char *' lvalue 
+// CHECK-NEXT:MemberExpr 0x{{[0-9a-f]+}} <> 'void *' lvalue ->h 0x[[HDL]]
+// CHECK-NEXT:CXXThisExpr 0x{{[0-9a-f]+}} <> 'hlsl::RWByteAddressBuffer *' implicit this
+// CHECK-NEXT:DeclRefExpr 0x{{[0-9a-f]+}} <> 'unsigned int' ParmVar 0x[[LOAD_PARAM]] 'ByteAddress' 'unsigned int'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_F:[0-9a-f]+]] <>  used Load 'float (unsigned int)'
+// CHECK-NEXT:TemplateArgument type 'float'
+// CHECK-NEXT:BuiltinType 0x{{[0-9a-f]+}} 'float'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_F2:[0-9a-f]+]] <>  used Load 'float (unsigned int) __attribute__((ext_vector_type(2)))'
+// CHECK-NEXT:TemplateArgument type 'float __attribute__((ext_vector_type(2)))'
+// CHECK-NEXT:ExtVectorType 0x{{[0-9a-f]+}} 'float __attribute__((ext_vector_type(2)))' 2
+// CHECK-NEXT:BuiltinType 0x{{[0-9a-f]+}} 'float'
+
+// CHECK:CXXMethodDecl 0x[[LOAD_S:[0-9a-f]+]] <>  used Load 'S (unsigned int)'
+// CHECK-NEXT:TemplateArgument type 'S'
+// CHECK-NEXT:-RecordType 0x{{[0-9a-f]+}} 'S'
+// CHECK-NEXT:CXXRecord 0x[[RECORD:[0-9a-f]+]] 'S'
+
+// CHECK:VarDecl 0x[[BUF:[0-9a-f]+]] <{{.+}}:1, col:21> col:21 used U 

[PATCH] D136743: [HLSL] support ConstantBuffer

2022-10-26 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 470870.
python3kgae edited the summary of this revision.
python3kgae added a comment.

Fix windows test fail caused by dead ptr.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136743/new/

https://reviews.llvm.org/D136743

Files:
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/test/AST/HLSL/CBV.hlsl
  clang/test/SemaHLSL/BuiltIns/CBV.hlsl

Index: clang/test/SemaHLSL/BuiltIns/CBV.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BuiltIns/CBV.hlsl
@@ -0,0 +1,8 @@
+// RUN: not %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -verify %s 2>&1 | FileCheck %s
+
+// CHECK:error: 'error' diagnostics seen but not expected:
+// CHECK-NEXT:  (frontend): base specifier must name a class
+// CHECK:1 error generated
+
+// expected-note@+1 {{in instantiation of template class 'hlsl::ConstantBuffer' requested here}}
+ConstantBuffer CB;
Index: clang/test/AST/HLSL/CBV.hlsl
===
--- /dev/null
+++ clang/test/AST/HLSL/CBV.hlsl
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -ast-dump %s | FileCheck %s
+
+// CHECK:-ClassTemplateDecl 0x{{[0-9a-f]+}} <>  implicit ConstantBuffer
+// CHECK-NEXT:-TemplateTypeParmDecl 0x{{[0-9a-f]+}} <>  class depth 0 index 0 element_type
+// CHECK-NEXT:-CXXRecordDecl 0x{{[0-9a-f]+}} <>  implicit class ConstantBuffer definition
+// CHECK:-public 'element_type'
+// CHECK-NEXT:-FinalAttr 0x{{[0-9a-f]+}} <> Implicit final
+// CHECK-NEXT:-HLSLResourceAttr 0x{{[0-9a-f]+}} <> Implicit CBuffer CBufferKind
+
+// CHECK:-CXXRecordDecl 0x{{[0-9a-f]+}}  col:8 implicit struct S
+// CHECK-NEXT:-FieldDecl 0x[[A:[0-9a-f]+]]  col:11 referenced a 'float'
+struct S {
+float a;
+};
+
+// CHECK:VarDecl 0x[[CB:[0-9a-f]+]]  col:19 used CB 'ConstantBuffer':'hlsl::ConstantBuffer'
+ConstantBuffer CB;
+
+float foo() {
+// CHECK:ReturnStmt 0x{{[0-9a-f]+}} 
+// CHECK-NEXT:-ImplicitCastExpr 0x{{[0-9a-f]+}}  'float' 
+// CHECK-NEXT:-MemberExpr 0x{{[0-9a-f]+}}  'float' lvalue .a 0x[[A]]
+// CHECK-NEXT:-ImplicitCastExpr 0x{{[0-9a-f]+}}  'S' lvalue 
+// CHECK-NEXT:-DeclRefExpr 0x{{[0-9a-f]+}}  'ConstantBuffer':'hlsl::ConstantBuffer' lvalue Var 0x[[CB]] 'CB' 'ConstantBuffer':'hlsl::ConstantBuffer'
+return CB.a;
+}
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -34,6 +34,7 @@
   ClassTemplateDecl *PrevTemplate = nullptr;
   NamespaceDecl *HLSLNamespace = nullptr;
   llvm::StringMap Fields;
+  llvm::SmallVector Bases;
 
   BuiltinTypeDeclBuilder(CXXRecordDecl *R) : Record(R) {
 Record->startDefinition();
@@ -306,6 +307,30 @@
 return *this;
   }
 
+  BuiltinTypeDeclBuilder (TypeDecl *Parent) {
+if (Record->isCompleteDefinition())
+  return *this;
+TypeSourceInfo *TInfo =
+HLSLNamespace->getASTContext().getTrivialTypeSourceInfo(
+QualType(Parent->getTypeForDecl(), 0));
+CXXBaseSpecifier Base(SourceRange(), false, false,
+  AccessSpecifier::AS_public, TInfo, SourceLocation());
+Bases.emplace_back(Base);
+return *this;
+  }
+
+  BuiltinTypeDeclBuilder () {
+if (Record->isCompleteDefinition())
+  return *this;
+
+llvm::SmallVector BasesData;
+for (auto  : Bases)
+  BasesData.emplace_back();
+Record->setBases(BasesData.data(), BasesData.size());
+Bases.clear();
+return *this;
+  }
+
   TemplateParameterListBuilder addTemplateArgumentList();
 };
 
@@ -336,6 +361,13 @@
 return *this;
   }
 
+  TemplateParameterListBuilder (uint32_t I) {
+if (Params.size() <= I)
+  return *this;
+Builder.addBase(cast(Params[I]));
+return *this;
+  }
+
   BuiltinTypeDeclBuilder () {
 if (Params.empty())
   return Builder;
@@ -466,6 +498,20 @@
  .addHandleMember(AccessSpecifier::AS_public)
  .completeDefinition()
  .Record;
+  // Add CBV as
+  // template
+  // struct ConstantBuffer : T {
+  // };
+  BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace, "ConstantBuffer")
+  .startDefinition()
+  .addTemplateArgumentList()
+  .addTypeParameter("element_type")
+  .addTypeParameterAsBase(0)
+  .finalizeTemplateArgs()
+  .setBases()
+  .annotateResourceClass(HLSLResourceAttr::CBuffer,
+ HLSLResourceAttr::CBufferKind)
+  .completeDefinition();
 }
 
 void HLSLExternalSemaSource::forwardDeclareHLSLTypes() {
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D136743: [HLSL] support ConstantBuffer

2022-10-26 Thread Xiang Li via Phabricator via cfe-commits
python3kgae created this revision.
python3kgae added reviewers: pow2clk, beanz, bogner.
Herald added a subscriber: Anastasia.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Support ConstantBuffer by define it like

  template
  struct ConstantBuffer : public T {
  };


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D136743

Files:
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/test/AST/HLSL/CBV.hlsl
  clang/test/SemaHLSL/BuiltIns/CBV.hlsl

Index: clang/test/SemaHLSL/BuiltIns/CBV.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BuiltIns/CBV.hlsl
@@ -0,0 +1,8 @@
+// RUN: not %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -verify %s 2>&1 | FileCheck %s
+
+// CHECK:error: 'error' diagnostics seen but not expected:
+// CHECK-NEXT:  (frontend): base specifier must name a class
+// CHECK:1 error generated
+
+// expected-note@+1 {{in instantiation of template class 'hlsl::ConstantBuffer' requested here}}
+ConstantBuffer CB;
Index: clang/test/AST/HLSL/CBV.hlsl
===
--- /dev/null
+++ clang/test/AST/HLSL/CBV.hlsl
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only -ast-dump %s | FileCheck %s
+
+// CHECK:-ClassTemplateDecl 0x{{[0-9a-f]+}} <>  implicit ConstantBuffer
+// CHECK-NEXT:-TemplateTypeParmDecl 0x{{[0-9a-f]+}} <>  class depth 0 index 0 element_type
+// CHECK-NEXT:-CXXRecordDecl 0x{{[0-9a-f]+}} <>  implicit class ConstantBuffer definition
+// CHECK:-public 'element_type'
+// CHECK-NEXT:-FinalAttr 0x{{[0-9a-f]+}} <> Implicit final
+// CHECK-NEXT:-HLSLResourceAttr 0x{{[0-9a-f]+}} <> Implicit CBuffer CBufferKind
+
+// CHECK:-CXXRecordDecl 0x{{[0-9a-f]+}}  col:8 implicit struct S
+// CHECK-NEXT:-FieldDecl 0x[[A:[0-9a-f]+]]  col:11 referenced a 'float'
+struct S {
+float a;
+};
+
+// CHECK:VarDecl 0x[[CB:[0-9a-f]+]]  col:19 used CB 'ConstantBuffer':'hlsl::ConstantBuffer'
+ConstantBuffer CB;
+
+float foo() {
+// CHECK:ReturnStmt 0x{{[0-9a-f]+}} 
+// CHECK-NEXT:-ImplicitCastExpr 0x{{[0-9a-f]+}}  'float' 
+// CHECK-NEXT:-MemberExpr 0x{{[0-9a-f]+}}  'float' lvalue .a 0x[[A]]
+// CHECK-NEXT:-ImplicitCastExpr 0x{{[0-9a-f]+}}  'S' lvalue 
+// CHECK-NEXT:-DeclRefExpr 0x{{[0-9a-f]+}}  'ConstantBuffer':'hlsl::ConstantBuffer' lvalue Var 0x[[CB]] 'CB' 'ConstantBuffer':'hlsl::ConstantBuffer'
+return CB.a;
+}
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -34,6 +34,7 @@
   ClassTemplateDecl *PrevTemplate = nullptr;
   NamespaceDecl *HLSLNamespace = nullptr;
   llvm::StringMap Fields;
+  llvm::SmallVector Bases;
 
   BuiltinTypeDeclBuilder(CXXRecordDecl *R) : Record(R) {
 Record->startDefinition();
@@ -306,6 +307,27 @@
 return *this;
   }
 
+  BuiltinTypeDeclBuilder (TypeDecl *Parent) {
+if (Record->isCompleteDefinition())
+  return *this;
+TypeSourceInfo *TInfo =
+HLSLNamespace->getASTContext().getTrivialTypeSourceInfo(
+QualType(Parent->getTypeForDecl(), 0));
+CXXBaseSpecifier Base(SourceRange(), false, false,
+  AccessSpecifier::AS_public, TInfo, SourceLocation());
+Bases.emplace_back();
+return *this;
+  }
+
+  BuiltinTypeDeclBuilder () {
+if (Record->isCompleteDefinition())
+  return *this;
+
+Record->setBases(Bases.data(), Bases.size());
+Bases.clear();
+return *this;
+  }
+
   TemplateParameterListBuilder addTemplateArgumentList();
 };
 
@@ -336,6 +358,13 @@
 return *this;
   }
 
+  TemplateParameterListBuilder (uint32_t I) {
+if (Params.size() <= I)
+  return *this;
+Builder.addBase(cast(Params[I]));
+return *this;
+  }
+
   BuiltinTypeDeclBuilder () {
 if (Params.empty())
   return Builder;
@@ -466,6 +495,20 @@
  .addHandleMember(AccessSpecifier::AS_public)
  .completeDefinition()
  .Record;
+  // Add CBV as
+  // template
+  // struct ConstantBuffer : T {
+  // };
+  BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace, "ConstantBuffer")
+  .startDefinition()
+  .addTemplateArgumentList()
+  .addTypeParameter("element_type")
+  .addTypeParameterAsBase(0)
+  .finalizeTemplateArgs()
+  .setBases()
+  .annotateResourceClass(HLSLResourceAttr::CBuffer,
+ HLSLResourceAttr::CBufferKind)
+  .completeDefinition();
 }
 
 void HLSLExternalSemaSource::forwardDeclareHLSLTypes() {
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D136482: [HLSL] support unbounded global resource array.

2022-10-21 Thread Xiang Li via Phabricator via cfe-commits
python3kgae created this revision.
python3kgae added reviewers: pow2clk, beanz, bogner.
Herald added a subscriber: Anastasia.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

unbounded resource array is allowed in HLSL.
Here is an example.

RWBuffer B[];
 float main(uint ID : BufID) : SV_Target {

return B[ID][0];
  }

Type::isHLSLResourceType is added to check HLSLResource.
HLSLResourceAttr is added on the forward decl so it is ready when check 
incomplete array type.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D136482

Files:
  clang/include/clang/AST/Type.h
  clang/lib/AST/Type.cpp
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  clang/lib/Sema/SemaDecl.cpp
  clang/test/AST/HLSL/unbounded_global_resource_array.hlsl
  clang/test/SemaHLSL/unbounded_global_resource_array.hlsl

Index: clang/test/SemaHLSL/unbounded_global_resource_array.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/unbounded_global_resource_array.hlsl
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil--shadermodel6.7-library  %s  -verify
+
+// expected-error@+1 {{definition of variable with array type needs an explicit size or an initializer}}
+static RWBuffer A[];
+// expected-error@+1 {{definition of variable with array type needs an explicit size or an initializer}}
+float F[];
+
+// Make sure extern global resource unbounded array compiles.
+RWBuffer B[];
Index: clang/test/AST/HLSL/unbounded_global_resource_array.hlsl
===
--- /dev/null
+++ clang/test/AST/HLSL/unbounded_global_resource_array.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -fsyntax-only -ast-dump %s | FileCheck %s
+
+
+// CHECK:VarDecl 0x{{[0-9a-f]+}} <{{.*}}:7:1, col:19> col:17 B 'RWBuffer[]'
+// Make sure no CXXConstructExpr created for unbounded resource array.
+// CHECK-NOT:CXXConstructExpr
+RWBuffer B[];
Index: clang/lib/Sema/SemaDecl.cpp
===
--- clang/lib/Sema/SemaDecl.cpp
+++ clang/lib/Sema/SemaDecl.cpp
@@ -13504,7 +13504,9 @@
 
 // Provide a specific diagnostic for uninitialized variable
 // definitions with incomplete array type.
-if (Type->isIncompleteArrayType()) {
+if (Type->isIncompleteArrayType() &&
+!(getLangOpts().HLSL && Var->hasExternalFormalLinkage() &&
+  Type->getArrayElementTypeNoTypeQual()->isHLSLResourceType())) {
   if (Var->isConstexpr())
 Diag(Var->getLocation(), diag::err_constexpr_var_requires_const_init)
 << Var;
@@ -13576,6 +13578,12 @@
 if (getLangOpts().OpenCL &&
 Var->getType().getAddressSpace() == LangAS::opencl_local)
   return;
+
+// In HLSL, global resource array is allowed to be incomplete.
+// Skip initializing incomplate array here.
+if (getLangOpts().HLSL && Var->getType()->isIncompleteArrayType())
+  return;
+
 // C++03 [dcl.init]p9:
 //   If no initializer is specified for an object, and the
 //   object is of (possibly cv-qualified) non-POD class type (or
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -474,6 +474,8 @@
  .addTemplateArgumentList()
  .addTypeParameter("element_type", SemaPtr->getASTContext().FloatTy)
  .finalizeTemplateArgs()
+ .annotateResourceClass(HLSLResourceAttr::UAV,
+HLSLResourceAttr::TypedBuffer)
  .Record;
   if (!Decl->isCompleteDefinition())
 Completions.insert(
@@ -503,7 +505,5 @@
   .addHandleMember()
   .addDefaultHandleConstructor(*SemaPtr, ResourceClass::UAV)
   .addArraySubscriptOperators()
-  .annotateResourceClass(HLSLResourceAttr::UAV,
- HLSLResourceAttr::TypedBuffer)
   .completeDefinition();
 }
Index: clang/lib/AST/Type.cpp
===
--- clang/lib/AST/Type.cpp
+++ clang/lib/AST/Type.cpp
@@ -572,6 +572,19 @@
   return false;
 }
 
+bool Type::isHLSLResourceType() const {
+  if (const auto *RT = getAs()) {
+if (const auto *D =
+llvm::dyn_cast(RT->getDecl())) {
+  if (D->isCompleteDefinition())
+return D->hasAttr();
+  ClassTemplateDecl *CTD = D->getSpecializedTemplate();
+  return CTD->getTemplatedDecl()->hasAttr();
+}
+  }
+  return false;
+}
+
 bool Type::isInterfaceType() const {
   if (const auto *RT = getAs())
 return RT->getDecl()->isInterface();
Index: clang/include/clang/AST/Type.h
===
--- clang/include/clang/AST/Type.h
+++ 

[PATCH] D133668: [HLSL] Disable integer promotion to avoid int16_t being promoted to int for HLSL.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG464926ef4484: [HLSL] Disable integer promotion to avoid 
int16_t being promoted to int for… (authored by python3kgae).

Changed prior to commit:
  https://reviews.llvm.org/D133668?vs=469373=469387#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133668/new/

https://reviews.llvm.org/D133668

Files:
  clang/include/clang/AST/ASTContext.h
  clang/include/clang/AST/CanonicalType.h
  clang/include/clang/AST/Type.h
  clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
  clang/lib/AST/ASTContext.cpp
  clang/lib/AST/FormatString.cpp
  clang/lib/AST/Type.cpp
  clang/lib/CodeGen/CGExprScalar.cpp
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/Sema/SemaChecking.cpp
  clang/lib/Sema/SemaDecl.cpp
  clang/lib/Sema/SemaExpr.cpp
  clang/lib/Sema/SemaInit.cpp
  clang/lib/Sema/SemaOverload.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/CodeGenHLSL/builtins/abs.hlsl
  clang/test/CodeGenHLSL/no_int_promotion.hlsl
  clang/test/SemaHLSL/BitInt128.hlsl

Index: clang/test/SemaHLSL/BitInt128.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BitInt128.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o - %s -verify
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+_BitInt(128) i128;
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+unsigned _BitInt(128) u128;
Index: clang/test/CodeGenHLSL/no_int_promotion.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/no_int_promotion.hlsl
@@ -0,0 +1,47 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+
+// FIXME: add test for char/int8_t/uint8_t when these types are supported in HLSL.
+//  See https://github.com/llvm/llvm-project/issues/58453.
+
+// Make sure generate i16 add.
+// CHECK: add nsw i16 %
+int16_t add(int16_t a, int16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+int16_t2 add(int16_t2 a, int16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+int16_t3 add(int16_t3 a, int16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+int16_t4 add(int16_t4 a, int16_t4 b) {
+  return a + b;
+}
+// CHECK: define noundef i16 @
+// CHECK: add i16 %
+uint16_t add(uint16_t a, uint16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+uint16_t2 add(uint16_t2 a, uint16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+uint16_t3 add(uint16_t3 a, uint16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+uint16_t4 add(uint16_t4 a, uint16_t4 b) {
+  return a + b;
+}
Index: clang/test/CodeGenHLSL/builtins/abs.hlsl
===
--- clang/test/CodeGenHLSL/builtins/abs.hlsl
+++ clang/test/CodeGenHLSL/builtins/abs.hlsl
@@ -7,9 +7,8 @@
 
 using hlsl::abs;
 
-// CHECK: define noundef signext i16 @
-// FIXME: int16_t is promoted to i32 now. Change to abs.i16 once it is fixed.
-// CHECK: call i32 @llvm.abs.i32(
+// CHECK: define noundef i16 @
+// CHECK: call i16 @llvm.abs.i16(
 int16_t test_abs_int16_t ( int16_t p0 ) {
   return abs ( p0 );
 }
Index: clang/lib/Sema/SemaType.cpp
===
--- clang/lib/Sema/SemaType.cpp
+++ clang/lib/Sema/SemaType.cpp
@@ -5457,10 +5457,10 @@
   D.setInvalidType();
 }
   } else if (!FTI.hasPrototype) {
-if (ParamTy->isPromotableIntegerType()) {
+if (Context.isPromotableIntegerType(ParamTy)) {
   ParamTy = Context.getPromotedIntegerType(ParamTy);
   Param->setKNRPromoted(true);
-} else if (const BuiltinType* BTy = ParamTy->getAs()) {
+} else if (const BuiltinType *BTy = ParamTy->getAs()) {
   if (BTy->getKind() == BuiltinType::Float) {
 ParamTy = Context.DoubleTy;
 Param->setKNRPromoted(true);
Index: clang/lib/Sema/SemaOverload.cpp
===
--- clang/lib/Sema/SemaOverload.cpp
+++ clang/lib/Sema/SemaOverload.cpp
@@ -2168,9 +2168,9 @@
   // int can represent all the values of the source type; otherwise,
   // the source rvalue can be converted to an rvalue of type unsigned
   // int (C++ 4.5p1).
-  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
+  if (Context.isPromotableIntegerType(FromType) && !FromType->isBooleanType() &&
   !FromType->isEnumeralType()) {
-if (// We can promote 

[PATCH] D133668: [HLSL] Disable integer promotion to avoid int16_t being promoted to int for HLSL.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 469373.
python3kgae added a comment.

Fix clang-format.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133668/new/

https://reviews.llvm.org/D133668

Files:
  clang/include/clang/AST/ASTContext.h
  clang/include/clang/AST/CanonicalType.h
  clang/include/clang/AST/Type.h
  clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
  clang/lib/AST/ASTContext.cpp
  clang/lib/AST/FormatString.cpp
  clang/lib/AST/Type.cpp
  clang/lib/CodeGen/CGExprScalar.cpp
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/Sema/SemaChecking.cpp
  clang/lib/Sema/SemaDecl.cpp
  clang/lib/Sema/SemaExpr.cpp
  clang/lib/Sema/SemaInit.cpp
  clang/lib/Sema/SemaOverload.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/CodeGenHLSL/builtins/abs.hlsl
  clang/test/CodeGenHLSL/no_int_promotion.hlsl
  clang/test/SemaHLSL/BitInt128.hlsl

Index: clang/test/SemaHLSL/BitInt128.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BitInt128.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o - %s -verify
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+_BitInt(128) i128;
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+unsigned _BitInt(128) u128;
Index: clang/test/CodeGenHLSL/no_int_promotion.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/no_int_promotion.hlsl
@@ -0,0 +1,47 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+
+// FIXME: add test for char/int8_t/uint8_t when these types are supported in HLSL.
+//  See https://github.com/llvm/llvm-project/issues/58453.
+
+// Make sure generate i16 add.
+// CHECK: add nsw i16 %
+int16_t add(int16_t a, int16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+int16_t2 add(int16_t2 a, int16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+int16_t3 add(int16_t3 a, int16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+int16_t4 add(int16_t4 a, int16_t4 b) {
+  return a + b;
+}
+// CHECK: define noundef i16 @
+// CHECK: add i16 %
+uint16_t add(uint16_t a, uint16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+uint16_t2 add(uint16_t2 a, uint16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+uint16_t3 add(uint16_t3 a, uint16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+uint16_t4 add(uint16_t4 a, uint16_t4 b) {
+  return a + b;
+}
Index: clang/test/CodeGenHLSL/builtins/abs.hlsl
===
--- clang/test/CodeGenHLSL/builtins/abs.hlsl
+++ clang/test/CodeGenHLSL/builtins/abs.hlsl
@@ -6,9 +6,8 @@
 // RUN:   -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF
 
 
-// CHECK: define noundef signext i16 @
-// FIXME: int16_t is promoted to i32 now. Change to abs.i16 once it is fixed.
-// CHECK: call i32 @llvm.abs.i32(
+// CHECK: define noundef i16 @
+// CHECK: call i16 @llvm.abs.i16(
 int16_t test_abs_int16_t ( int16_t p0 ) {
   return abs ( p0 );
 }
Index: clang/lib/Sema/SemaType.cpp
===
--- clang/lib/Sema/SemaType.cpp
+++ clang/lib/Sema/SemaType.cpp
@@ -5425,10 +5425,10 @@
   D.setInvalidType();
 }
   } else if (!FTI.hasPrototype) {
-if (ParamTy->isPromotableIntegerType()) {
+if (Context.isPromotableIntegerType(ParamTy)) {
   ParamTy = Context.getPromotedIntegerType(ParamTy);
   Param->setKNRPromoted(true);
-} else if (const BuiltinType* BTy = ParamTy->getAs()) {
+} else if (const BuiltinType *BTy = ParamTy->getAs()) {
   if (BTy->getKind() == BuiltinType::Float) {
 ParamTy = Context.DoubleTy;
 Param->setKNRPromoted(true);
Index: clang/lib/Sema/SemaOverload.cpp
===
--- clang/lib/Sema/SemaOverload.cpp
+++ clang/lib/Sema/SemaOverload.cpp
@@ -2078,9 +2078,9 @@
   // int can represent all the values of the source type; otherwise,
   // the source rvalue can be converted to an rvalue of type unsigned
   // int (C++ 4.5p1).
-  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
+  if (Context.isPromotableIntegerType(FromType) && !FromType->isBooleanType() &&
   !FromType->isEnumeralType()) {
-if (// We can promote any signed, promotable integer type to an int
+if ( // We can promote any signed, promotable integer type to an int
 

[PATCH] D136134: [NFC] [DirectX backend] move ResourceClass into llvm.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa7183a158d68: [NFC] [DirectX backend] move ResourceClass 
into llvm. (authored by python3kgae).

Changed prior to commit:
  https://reviews.llvm.org/D136134?vs=469302=469336#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136134/new/

https://reviews.llvm.org/D136134

Files:
  clang/include/clang/Basic/HLSLRuntime.h
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/lib/Sema/CMakeLists.txt
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  llvm/include/llvm/Frontend/HLSL/HLSLResource.h

Index: llvm/include/llvm/Frontend/HLSL/HLSLResource.h
===
--- llvm/include/llvm/Frontend/HLSL/HLSLResource.h
+++ llvm/include/llvm/Frontend/HLSL/HLSLResource.h
@@ -21,6 +21,15 @@
 
 namespace hlsl {
 
+enum class ResourceClass : uint8_t {
+  SRV = 0,
+  UAV,
+  CBuffer,
+  Sampler,
+  Invalid,
+  NumClasses = Invalid,
+};
+
 // The value ordering of this enumeration is part of the DXIL ABI. Elements
 // can only be added to the end, and not removed.
 enum class ResourceKind : uint32_t {
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -17,11 +17,12 @@
 #include "clang/Basic/HLSLRuntime.h"
 #include "clang/Sema/Lookup.h"
 #include "clang/Sema/Sema.h"
+#include "llvm/Frontend/HLSL/HLSLResource.h"
 
 #include 
 
 using namespace clang;
-using namespace hlsl;
+using namespace llvm::hlsl;
 
 namespace {
 
Index: clang/lib/Sema/CMakeLists.txt
===
--- clang/lib/Sema/CMakeLists.txt
+++ clang/lib/Sema/CMakeLists.txt
@@ -1,5 +1,6 @@
 set(LLVM_LINK_COMPONENTS
   Core
+  FrontendHLSL
   FrontendOpenMP
   MC
   Support
Index: clang/lib/CodeGen/CGHLSLRuntime.h
===
--- clang/lib/CodeGen/CGHLSLRuntime.h
+++ clang/lib/CodeGen/CGHLSLRuntime.h
@@ -71,7 +71,7 @@
 protected:
   CodeGenModule 
   uint32_t ResourceCounters[static_cast(
-  hlsl::ResourceClass::NumClasses)] = {0};
+  llvm::hlsl::ResourceClass::NumClasses)] = {0};
 
   llvm::Value *emitInputSemantic(llvm::IRBuilder<> , const ParmVarDecl ,
  llvm::Type *Ty);
@@ -94,7 +94,7 @@
 private:
   void addBufferResourceAnnotation(llvm::GlobalVariable *GV,
llvm::StringRef TyName,
-   hlsl::ResourceClass RC,
+   llvm::hlsl::ResourceClass RC,
llvm::hlsl::ResourceKind RK,
BufferResBinding );
   void addConstant(VarDecl *D, Buffer );
Index: clang/lib/CodeGen/CGHLSLRuntime.cpp
===
--- clang/lib/CodeGen/CGHLSLRuntime.cpp
+++ clang/lib/CodeGen/CGHLSLRuntime.cpp
@@ -24,7 +24,7 @@
 
 using namespace clang;
 using namespace CodeGen;
-using namespace hlsl;
+using namespace clang::hlsl;
 using namespace llvm;
 
 namespace {
@@ -176,8 +176,9 @@
 layoutBuffer(Buf, DL);
 GlobalVariable *GV = replaceBuffer(Buf);
 M.getGlobalList().push_back(GV);
-hlsl::ResourceClass RC =
-Buf.IsCBuffer ? hlsl::ResourceClass::CBuffer : hlsl::ResourceClass::SRV;
+llvm::hlsl::ResourceClass RC = Buf.IsCBuffer
+   ? llvm::hlsl::ResourceClass::CBuffer
+   : llvm::hlsl::ResourceClass::SRV;
 llvm::hlsl::ResourceKind RK = Buf.IsCBuffer
   ? llvm::hlsl::ResourceKind::CBuffer
   : llvm::hlsl::ResourceKind::TBuffer;
@@ -193,7 +194,7 @@
 
 void CGHLSLRuntime::addBufferResourceAnnotation(llvm::GlobalVariable *GV,
 llvm::StringRef TyName,
-hlsl::ResourceClass RC,
+llvm::hlsl::ResourceClass RC,
 llvm::hlsl::ResourceKind RK,
 BufferResBinding ) {
   uint32_t Counter = ResourceCounters[static_cast(RC)]++;
@@ -201,13 +202,13 @@
 
   NamedMDNode *ResourceMD = nullptr;
   switch (RC) {
-  case hlsl::ResourceClass::UAV:
+  case llvm::hlsl::ResourceClass::UAV:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.uavs");
 break;
-  case hlsl::ResourceClass::SRV:
+  case llvm::hlsl::ResourceClass::SRV:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.srvs");
 break;
-  case hlsl::ResourceClass::CBuffer:
+  case llvm::hlsl::ResourceClass::CBuffer:
 ResourceMD = 

[PATCH] D133668: [HLSL] Disable integer promotion to avoid int16_t being promoted to int for HLSL.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 469334.
python3kgae added a comment.

Update test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133668/new/

https://reviews.llvm.org/D133668

Files:
  clang/include/clang/AST/ASTContext.h
  clang/include/clang/AST/CanonicalType.h
  clang/include/clang/AST/Type.h
  clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
  clang/lib/AST/ASTContext.cpp
  clang/lib/AST/FormatString.cpp
  clang/lib/AST/Type.cpp
  clang/lib/CodeGen/CGExprScalar.cpp
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/Sema/SemaChecking.cpp
  clang/lib/Sema/SemaDecl.cpp
  clang/lib/Sema/SemaExpr.cpp
  clang/lib/Sema/SemaInit.cpp
  clang/lib/Sema/SemaOverload.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/CodeGenHLSL/builtins/abs.hlsl
  clang/test/CodeGenHLSL/no_int_promotion.hlsl
  clang/test/SemaHLSL/BitInt128.hlsl

Index: clang/test/SemaHLSL/BitInt128.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BitInt128.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o - %s -verify
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+_BitInt(128) i128;
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+unsigned _BitInt(128) u128;
Index: clang/test/CodeGenHLSL/no_int_promotion.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/no_int_promotion.hlsl
@@ -0,0 +1,47 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+
+// FIXME: add test for char/int8_t/uint8_t when these types are supported in HLSL.
+//  See https://github.com/llvm/llvm-project/issues/58453.
+
+// Make sure generate i16 add.
+// CHECK: add nsw i16 %
+int16_t add(int16_t a, int16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+int16_t2 add(int16_t2 a, int16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+int16_t3 add(int16_t3 a, int16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+int16_t4 add(int16_t4 a, int16_t4 b) {
+  return a + b;
+}
+// CHECK: define noundef i16 @
+// CHECK: add i16 %
+uint16_t add(uint16_t a, uint16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+uint16_t2 add(uint16_t2 a, uint16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+uint16_t3 add(uint16_t3 a, uint16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+uint16_t4 add(uint16_t4 a, uint16_t4 b) {
+  return a + b;
+}
Index: clang/test/CodeGenHLSL/builtins/abs.hlsl
===
--- clang/test/CodeGenHLSL/builtins/abs.hlsl
+++ clang/test/CodeGenHLSL/builtins/abs.hlsl
@@ -6,9 +6,8 @@
 // RUN:   -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF
 
 
-// CHECK: define noundef signext i16 @
-// FIXME: int16_t is promoted to i32 now. Change to abs.i16 once it is fixed.
-// CHECK: call i32 @llvm.abs.i32(
+// CHECK: define noundef i16 @
+// CHECK: call i16 @llvm.abs.i16(
 int16_t test_abs_int16_t ( int16_t p0 ) {
   return abs ( p0 );
 }
Index: clang/lib/Sema/SemaType.cpp
===
--- clang/lib/Sema/SemaType.cpp
+++ clang/lib/Sema/SemaType.cpp
@@ -5425,7 +5425,7 @@
   D.setInvalidType();
 }
   } else if (!FTI.hasPrototype) {
-if (ParamTy->isPromotableIntegerType()) {
+if (Context.isPromotableIntegerType(ParamTy)) {
   ParamTy = Context.getPromotedIntegerType(ParamTy);
   Param->setKNRPromoted(true);
 } else if (const BuiltinType* BTy = ParamTy->getAs()) {
Index: clang/lib/Sema/SemaOverload.cpp
===
--- clang/lib/Sema/SemaOverload.cpp
+++ clang/lib/Sema/SemaOverload.cpp
@@ -2078,9 +2078,9 @@
   // int can represent all the values of the source type; otherwise,
   // the source rvalue can be converted to an rvalue of type unsigned
   // int (C++ 4.5p1).
-  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
+  if (Context.isPromotableIntegerType(FromType) && !FromType->isBooleanType() &&
   !FromType->isEnumeralType()) {
-if (// We can promote any signed, promotable integer type to an int
+if ( // We can promote any signed, promotable integer type to an int
 (FromType->isSignedIntegerType() ||
  // We can promote any unsigned integer type whose size is
  // less than int to an int.
Index: clang/lib/Sema/SemaInit.cpp

[PATCH] D136134: [NFC] [DirectX backend] move ResourceClass into llvm.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/lib/Sema/HLSLExternalSemaSource.cpp:20
 #include "clang/Sema/Sema.h"
+#include "llvm/Frontend/HLSL/HLSLResource.h"
 

beanz wrote:
> python3kgae wrote:
> > python3kgae wrote:
> > > beanz wrote:
> > > > You need to add FrontendHLSL to the Sema/CMakeLists.txt file too.
> > > Good catch.
> > > Not sure why both local build and the pre-commit check cannot hit it. :(
> > I think the reason it works is that it only used the enum decl in the 
> > header, not anything which needs to link.
> > Do we need to add FrontendHLSL to CMakeLists in this case?
> The first header include added to a component should add the linkage 
> dependency (even if it isn't strictly needed).
> 
> It is too easy to add a linkage dependency later without realizing it isn't 
> already specified. Because of how static archive linking works you don't 
> necessarily notice the missing dependency because many of our tools link both 
> Sema and CodeGen where there is already a dependency.
Got it.
Updated.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136134/new/

https://reviews.llvm.org/D136134

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


[PATCH] D136134: [NFC] [DirectX backend] move ResourceClass into llvm.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 469302.
python3kgae marked an inline comment as done.
python3kgae added a comment.

Add FrontendHLSL to Sema link


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136134/new/

https://reviews.llvm.org/D136134

Files:
  clang/include/clang/Basic/HLSLRuntime.h
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/lib/Sema/CMakeLists.txt
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  llvm/include/llvm/Frontend/HLSL/HLSLResource.h

Index: llvm/include/llvm/Frontend/HLSL/HLSLResource.h
===
--- llvm/include/llvm/Frontend/HLSL/HLSLResource.h
+++ llvm/include/llvm/Frontend/HLSL/HLSLResource.h
@@ -21,6 +21,15 @@
 
 namespace hlsl {
 
+enum class ResourceClass : uint8_t {
+  SRV = 0,
+  UAV,
+  CBuffer,
+  Sampler,
+  Invalid,
+  NumClasses = Invalid,
+};
+
 // The value ordering of this enumeration is part of the DXIL ABI. Elements
 // can only be added to the end, and not removed.
 enum class ResourceKind : uint32_t {
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -17,11 +17,12 @@
 #include "clang/Basic/HLSLRuntime.h"
 #include "clang/Sema/Lookup.h"
 #include "clang/Sema/Sema.h"
+#include "llvm/Frontend/HLSL/HLSLResource.h"
 
 #include 
 
 using namespace clang;
-using namespace hlsl;
+using namespace llvm::hlsl;
 
 namespace {
 
Index: clang/lib/Sema/CMakeLists.txt
===
--- clang/lib/Sema/CMakeLists.txt
+++ clang/lib/Sema/CMakeLists.txt
@@ -1,5 +1,6 @@
 set(LLVM_LINK_COMPONENTS
   Core
+  FrontendHLSL
   FrontendOpenMP
   MC
   Support
Index: clang/lib/CodeGen/CGHLSLRuntime.h
===
--- clang/lib/CodeGen/CGHLSLRuntime.h
+++ clang/lib/CodeGen/CGHLSLRuntime.h
@@ -71,7 +71,7 @@
 protected:
   CodeGenModule 
   uint32_t ResourceCounters[static_cast(
-  hlsl::ResourceClass::NumClasses)] = {0};
+  llvm::hlsl::ResourceClass::NumClasses)] = {0};
 
   llvm::Value *emitInputSemantic(llvm::IRBuilder<> , const ParmVarDecl );
 
@@ -93,7 +93,7 @@
 private:
   void addBufferResourceAnnotation(llvm::GlobalVariable *GV,
llvm::StringRef TyName,
-   hlsl::ResourceClass RC,
+   llvm::hlsl::ResourceClass RC,
llvm::hlsl::ResourceKind RK,
BufferResBinding );
   void addConstant(VarDecl *D, Buffer );
Index: clang/lib/CodeGen/CGHLSLRuntime.cpp
===
--- clang/lib/CodeGen/CGHLSLRuntime.cpp
+++ clang/lib/CodeGen/CGHLSLRuntime.cpp
@@ -24,7 +24,7 @@
 
 using namespace clang;
 using namespace CodeGen;
-using namespace hlsl;
+using namespace clang::hlsl;
 using namespace llvm;
 
 namespace {
@@ -176,8 +176,9 @@
 layoutBuffer(Buf, DL);
 GlobalVariable *GV = replaceBuffer(Buf);
 M.getGlobalList().push_back(GV);
-hlsl::ResourceClass RC =
-Buf.IsCBuffer ? hlsl::ResourceClass::CBuffer : hlsl::ResourceClass::SRV;
+llvm::hlsl::ResourceClass RC = Buf.IsCBuffer
+   ? llvm::hlsl::ResourceClass::CBuffer
+   : llvm::hlsl::ResourceClass::SRV;
 llvm::hlsl::ResourceKind RK = Buf.IsCBuffer
   ? llvm::hlsl::ResourceKind::CBuffer
   : llvm::hlsl::ResourceKind::TBuffer;
@@ -193,7 +194,7 @@
 
 void CGHLSLRuntime::addBufferResourceAnnotation(llvm::GlobalVariable *GV,
 llvm::StringRef TyName,
-hlsl::ResourceClass RC,
+llvm::hlsl::ResourceClass RC,
 llvm::hlsl::ResourceKind RK,
 BufferResBinding ) {
   uint32_t Counter = ResourceCounters[static_cast(RC)]++;
@@ -201,13 +202,13 @@
 
   NamedMDNode *ResourceMD = nullptr;
   switch (RC) {
-  case hlsl::ResourceClass::UAV:
+  case llvm::hlsl::ResourceClass::UAV:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.uavs");
 break;
-  case hlsl::ResourceClass::SRV:
+  case llvm::hlsl::ResourceClass::SRV:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.srvs");
 break;
-  case hlsl::ResourceClass::CBuffer:
+  case llvm::hlsl::ResourceClass::CBuffer:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.cbufs");
 break;
   default:
@@ -290,8 +291,9 @@
 
   QualType QT(Ty, 0);
   BufferResBinding Binding(D->getAttr());
-  addBufferResourceAnnotation(
-  GV, QT.getAsString(), static_cast(RC), RK, Binding);
+  

[PATCH] D136134: [NFC] [DirectX backend] move ResourceClass into llvm.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked an inline comment as done.
python3kgae added inline comments.



Comment at: clang/lib/Sema/HLSLExternalSemaSource.cpp:20
 #include "clang/Sema/Sema.h"
+#include "llvm/Frontend/HLSL/HLSLResource.h"
 

python3kgae wrote:
> beanz wrote:
> > You need to add FrontendHLSL to the Sema/CMakeLists.txt file too.
> Good catch.
> Not sure why both local build and the pre-commit check cannot hit it. :(
I think the reason it works is that it only used the enum decl in the header, 
not anything which needs to link.
Do we need to add FrontendHLSL to CMakeLists in this case?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136134/new/

https://reviews.llvm.org/D136134

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


[PATCH] D136134: [NFC] [DirectX backend] move ResourceClass into llvm.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked an inline comment as done.
python3kgae added inline comments.



Comment at: clang/lib/Sema/HLSLExternalSemaSource.cpp:20
 #include "clang/Sema/Sema.h"
+#include "llvm/Frontend/HLSL/HLSLResource.h"
 

beanz wrote:
> You need to add FrontendHLSL to the Sema/CMakeLists.txt file too.
Good catch.
Not sure why both local build and the pre-commit check cannot hit it. :(


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136134/new/

https://reviews.llvm.org/D136134

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


[PATCH] D135060: [HLSL] Add groupshare address space.

2022-10-20 Thread Xiang Li via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
python3kgae marked an inline comment as done.
Closed by commit rG7e04c0ad6325: [HLSL] Add groupshare address space. (authored 
by python3kgae).

Changed prior to commit:
  https://reviews.llvm.org/D135060?vs=469048=469259#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135060/new/

https://reviews.llvm.org/D135060

Files:
  clang/include/clang/Basic/AddressSpaces.h
  clang/include/clang/Basic/Attr.td
  clang/include/clang/Basic/AttrDocs.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Basic/TokenKinds.def
  clang/include/clang/Parse/Parser.h
  clang/include/clang/Sema/ParsedAttr.h
  clang/lib/AST/ASTContext.cpp
  clang/lib/AST/TypePrinter.cpp
  clang/lib/Basic/Targets/AMDGPU.cpp
  clang/lib/Basic/Targets/DirectX.h
  clang/lib/Basic/Targets/NVPTX.h
  clang/lib/Basic/Targets/SPIR.h
  clang/lib/Basic/Targets/TCE.h
  clang/lib/Basic/Targets/X86.h
  clang/lib/Parse/ParseDecl.cpp
  clang/lib/Parse/ParseExprCXX.cpp
  clang/lib/Parse/ParseTentative.cpp
  clang/lib/Sema/SemaDecl.cpp
  clang/lib/Sema/SemaLambda.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/AST/HLSL/group_shared.hlsl
  clang/test/CodeGenHLSL/group_shared.hlsl
  clang/test/Parser/opencl-cxx-keywords.cl
  clang/test/ParserHLSL/group_shared.hlsl
  clang/test/ParserHLSL/group_shared_202x.hlsl
  clang/test/SemaHLSL/group_shared.hlsl
  clang/test/SemaHLSL/group_shared_202x.hlsl
  clang/test/SemaOpenCL/address-spaces.cl
  clang/test/SemaOpenCL/invalid-kernel.cl
  clang/test/SemaTemplate/address_space-dependent.cpp

Index: clang/test/SemaTemplate/address_space-dependent.cpp
===
--- clang/test/SemaTemplate/address_space-dependent.cpp
+++ clang/test/SemaTemplate/address_space-dependent.cpp
@@ -43,7 +43,7 @@
 
 template 
 void tooBig() {
-  __attribute__((address_space(I))) int *bounds; // expected-error {{address space is larger than the maximum supported (8388588)}}
+  __attribute__((address_space(I))) int *bounds; // expected-error {{address space is larger than the maximum supported (8388587)}}
 }
 
 template 
Index: clang/test/SemaOpenCL/invalid-kernel.cl
===
--- clang/test/SemaOpenCL/invalid-kernel.cl
+++ clang/test/SemaOpenCL/invalid-kernel.cl
@@ -13,14 +13,14 @@
   return 0;
 }
 
-int* global x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* global x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
 
-int* local x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* local x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
 
-int* constant x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* constant x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
Index: clang/test/SemaOpenCL/address-spaces.cl
===
--- clang/test/SemaOpenCL/address-spaces.cl
+++ clang/test/SemaOpenCL/address-spaces.cl
@@ -231,12 +231,12 @@
 }
 #endif
 
-__private int func_return_priv(void);   //expected-error {{return value cannot be qualified with address space}}
-__global int func_return_global(void);  //expected-error {{return value cannot be qualified with address space}}
-__local int func_return_local(void);//expected-error {{return value cannot be qualified with address space}}
-__constant int func_return_constant(void);  //expected-error {{return value cannot be qualified with address space}}
+__private int func_return_priv(void);   //expected-error {{return type cannot be qualified with address space}}
+__global int func_return_global(void);  //expected-error {{return type cannot be qualified with address space}}
+__local int func_return_local(void);//expected-error {{return type cannot be qualified with address space}}
+__constant int func_return_constant(void);  //expected-error {{return type cannot be qualified with address space}}
 #if __OPENCL_C_VERSION__ >= 200
-__generic int func_return_generic(void);//expected-error {{return value cannot be qualified with address space}}
+__generic int func_return_generic(void);//expected-error {{return type cannot be qualified with address space}}
 #endif
 
 void func_multiple_addr(void) {
Index: clang/test/SemaHLSL/group_shared_202x.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/group_shared_202x.hlsl
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -std=hlsl202x  -o - -fsyntax-only %s -verify
+
+// expected-error@+1 {{return type cannot be qualified with address space}}
+auto func() 

[PATCH] D136134: [NFC] [DirectX backend] move ResourceClass into llvm.

2022-10-19 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 469074.
python3kgae added a comment.

Rebase


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136134/new/

https://reviews.llvm.org/D136134

Files:
  clang/include/clang/Basic/HLSLRuntime.h
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  llvm/include/llvm/Frontend/HLSL/HLSLResource.h

Index: llvm/include/llvm/Frontend/HLSL/HLSLResource.h
===
--- llvm/include/llvm/Frontend/HLSL/HLSLResource.h
+++ llvm/include/llvm/Frontend/HLSL/HLSLResource.h
@@ -21,6 +21,15 @@
 
 namespace hlsl {
 
+enum class ResourceClass : uint8_t {
+  SRV = 0,
+  UAV,
+  CBuffer,
+  Sampler,
+  Invalid,
+  NumClasses = Invalid,
+};
+
 // The value ordering of this enumeration is part of the DXIL ABI. Elements
 // can only be added to the end, and not removed.
 enum class ResourceKind : uint32_t {
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -17,11 +17,12 @@
 #include "clang/Basic/HLSLRuntime.h"
 #include "clang/Sema/Lookup.h"
 #include "clang/Sema/Sema.h"
+#include "llvm/Frontend/HLSL/HLSLResource.h"
 
 #include 
 
 using namespace clang;
-using namespace hlsl;
+using namespace llvm::hlsl;
 
 namespace {
 
Index: clang/lib/CodeGen/CGHLSLRuntime.h
===
--- clang/lib/CodeGen/CGHLSLRuntime.h
+++ clang/lib/CodeGen/CGHLSLRuntime.h
@@ -71,7 +71,7 @@
 protected:
   CodeGenModule 
   uint32_t ResourceCounters[static_cast(
-  hlsl::ResourceClass::NumClasses)] = {0};
+  llvm::hlsl::ResourceClass::NumClasses)] = {0};
 
   llvm::Value *emitInputSemantic(llvm::IRBuilder<> , const ParmVarDecl );
 
@@ -93,7 +93,7 @@
 private:
   void addBufferResourceAnnotation(llvm::GlobalVariable *GV,
llvm::StringRef TyName,
-   hlsl::ResourceClass RC,
+   llvm::hlsl::ResourceClass RC,
llvm::hlsl::ResourceKind RK,
BufferResBinding );
   void addConstant(VarDecl *D, Buffer );
Index: clang/lib/CodeGen/CGHLSLRuntime.cpp
===
--- clang/lib/CodeGen/CGHLSLRuntime.cpp
+++ clang/lib/CodeGen/CGHLSLRuntime.cpp
@@ -24,7 +24,7 @@
 
 using namespace clang;
 using namespace CodeGen;
-using namespace hlsl;
+using namespace clang::hlsl;
 using namespace llvm;
 
 namespace {
@@ -176,8 +176,9 @@
 layoutBuffer(Buf, DL);
 GlobalVariable *GV = replaceBuffer(Buf);
 M.getGlobalList().push_back(GV);
-hlsl::ResourceClass RC =
-Buf.IsCBuffer ? hlsl::ResourceClass::CBuffer : hlsl::ResourceClass::SRV;
+llvm::hlsl::ResourceClass RC = Buf.IsCBuffer
+   ? llvm::hlsl::ResourceClass::CBuffer
+   : llvm::hlsl::ResourceClass::SRV;
 llvm::hlsl::ResourceKind RK = Buf.IsCBuffer
   ? llvm::hlsl::ResourceKind::CBuffer
   : llvm::hlsl::ResourceKind::TBuffer;
@@ -193,7 +194,7 @@
 
 void CGHLSLRuntime::addBufferResourceAnnotation(llvm::GlobalVariable *GV,
 llvm::StringRef TyName,
-hlsl::ResourceClass RC,
+llvm::hlsl::ResourceClass RC,
 llvm::hlsl::ResourceKind RK,
 BufferResBinding ) {
   uint32_t Counter = ResourceCounters[static_cast(RC)]++;
@@ -201,13 +202,13 @@
 
   NamedMDNode *ResourceMD = nullptr;
   switch (RC) {
-  case hlsl::ResourceClass::UAV:
+  case llvm::hlsl::ResourceClass::UAV:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.uavs");
 break;
-  case hlsl::ResourceClass::SRV:
+  case llvm::hlsl::ResourceClass::SRV:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.srvs");
 break;
-  case hlsl::ResourceClass::CBuffer:
+  case llvm::hlsl::ResourceClass::CBuffer:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.cbufs");
 break;
   default:
@@ -290,8 +291,9 @@
 
   QualType QT(Ty, 0);
   BufferResBinding Binding(D->getAttr());
-  addBufferResourceAnnotation(
-  GV, QT.getAsString(), static_cast(RC), RK, Binding);
+  addBufferResourceAnnotation(GV, QT.getAsString(),
+  static_cast(RC), RK,
+  Binding);
 }
 
 CGHLSLRuntime::BufferResBinding::BufferResBinding(
Index: clang/include/clang/Basic/HLSLRuntime.h
===
--- clang/include/clang/Basic/HLSLRuntime.h
+++ 

[PATCH] D135721: [HLSL] Added HLSL this as a reference

2022-10-19 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/lib/Sema/HLSLExternalSemaSource.cpp:179
+AST, SourceLocation(),
+Constructor->getThisType().getTypePtr()->getPointeeType(), true);
+This->setValueKind(ExprValueKind::VK_LValue);

gracejennings wrote:
> python3kgae wrote:
> > gracejennings wrote:
> > > python3kgae wrote:
> > > > gracejennings wrote:
> > > > > python3kgae wrote:
> > > > > > Should this be a reference type?
> > > > > Could you expand on the question? I'm not sure I understand what 
> > > > > you're asking. The two changes in this file were made to update the 
> > > > > previous RWBuffer implementation
> > > > The current code will create CXXThisExpr with the pointeeType.
> > > > I thought it should be a reference type of the pointeeType.
> > > > 
> > > > Like in the test,
> > > > CXXThisExpr 0x{{[0-9A-Fa-f]+}} <> 'RWBuffer 
> > > > *' implicit this
> > > > 
> > > > The type is RWBuffer * before,
> > > > I expected this patch will change it to
> > > > RWBuffer &.
> > > The change that makes it more reference like than c++ from:
> > > 
> > > `-MemberExpr 0x{{[0-9A-Fa-f]+}}  'int' lvalue ->First 
> > > 0x{{[0-9A-Fa-f]+}}`
> > > `-CXXThisExpr 0x{{[0-9A-Fa-f]+}}  'Pair *' this`
> > > 
> > > to hlsl with this change
> > > 
> > > `-MemberExpr 0x{{[0-9A-Fa-f]+}}  'int' lvalue .First 
> > > 0x{{[0-9A-Fa-f]+}}`
> > > `-CXXThisExpr 0x{{[0-9A-Fa-f]+}}  'Pair' lvalue this`
> > I guess we have to change clang codeGen for this anyway.
> > 
> > Not sure which has less impact for codeGen side,  lvalue like what is in 
> > the current patch or make it a lvalue reference? My feeling is lvalue 
> > reference might be eaiser.
> > 
> > Did you test what needs to change for clang codeGen on top of the current 
> > patch?
> > 
> With just the lvalue change in the current patch there should be no 
> additional changes needed in clang CodeGen on top of the current patch
Since we already get the codeGen working with this patch,
it would be nice to have a codeGen test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135721/new/

https://reviews.llvm.org/D135721

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


[PATCH] D135060: [HLSL] Add groupshare address space.

2022-10-19 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked 3 inline comments as done.
python3kgae added inline comments.



Comment at: clang/test/ParserHLSL/group_shared_202x.hlsl:5-6
+
+// expected-error@+1 {{return type cannot be qualified with address space}}
+auto l = []() -> groupshared void {};
+// expected-error@+1 {{expected a type}}

aaron.ballman wrote:
> One test I think we need in SemaCXX for this is what happens when the lambda 
> return type (or function return type) is deduced. e.g.,
> ```
> extern groupshared float f;
> 
> auto func() {
>   return f;
> }
> 
> void other() {
>   [&]() { return f; };
> }
> ```
> Does use of `return f` cause us to deduce a return type that's annotated with 
> `groupshared` or does that get stripped off thanks to lvalue to rvalue 
> conversions and so we deduce `float`?
groupshared is stripped because of lvalue to rvalue conversions.

And even hlsl202x not enable CXX14 :( .


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135060/new/

https://reviews.llvm.org/D135060

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


[PATCH] D135060: [HLSL] Add groupshare address space.

2022-10-19 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 469048.
python3kgae added a comment.

Update comments and add more test cases.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135060/new/

https://reviews.llvm.org/D135060

Files:
  clang/include/clang/Basic/AddressSpaces.h
  clang/include/clang/Basic/Attr.td
  clang/include/clang/Basic/AttrDocs.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Basic/TokenKinds.def
  clang/include/clang/Parse/Parser.h
  clang/include/clang/Sema/ParsedAttr.h
  clang/lib/AST/ASTContext.cpp
  clang/lib/AST/TypePrinter.cpp
  clang/lib/Basic/Targets/AMDGPU.cpp
  clang/lib/Basic/Targets/DirectX.h
  clang/lib/Basic/Targets/NVPTX.h
  clang/lib/Basic/Targets/SPIR.h
  clang/lib/Basic/Targets/TCE.h
  clang/lib/Basic/Targets/X86.h
  clang/lib/Parse/ParseDecl.cpp
  clang/lib/Parse/ParseExprCXX.cpp
  clang/lib/Parse/ParseTentative.cpp
  clang/lib/Sema/SemaDecl.cpp
  clang/lib/Sema/SemaLambda.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/AST/HLSL/group_shared.hlsl
  clang/test/CodeGenHLSL/group_shared.hlsl
  clang/test/Parser/opencl-cxx-keywords.cl
  clang/test/ParserHLSL/group_shared.hlsl
  clang/test/ParserHLSL/group_shared_202x.hlsl
  clang/test/SemaHLSL/group_shared.hlsl
  clang/test/SemaHLSL/group_shared_202x.hlsl
  clang/test/SemaOpenCL/address-spaces.cl
  clang/test/SemaOpenCL/invalid-kernel.cl
  clang/test/SemaTemplate/address_space-dependent.cpp

Index: clang/test/SemaTemplate/address_space-dependent.cpp
===
--- clang/test/SemaTemplate/address_space-dependent.cpp
+++ clang/test/SemaTemplate/address_space-dependent.cpp
@@ -43,7 +43,7 @@
 
 template 
 void tooBig() {
-  __attribute__((address_space(I))) int *bounds; // expected-error {{address space is larger than the maximum supported (8388588)}}
+  __attribute__((address_space(I))) int *bounds; // expected-error {{address space is larger than the maximum supported (8388587)}}
 }
 
 template 
Index: clang/test/SemaOpenCL/invalid-kernel.cl
===
--- clang/test/SemaOpenCL/invalid-kernel.cl
+++ clang/test/SemaOpenCL/invalid-kernel.cl
@@ -13,14 +13,14 @@
   return 0;
 }
 
-int* global x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* global x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
 
-int* local x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* local x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
 
-int* constant x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* constant x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
Index: clang/test/SemaOpenCL/address-spaces.cl
===
--- clang/test/SemaOpenCL/address-spaces.cl
+++ clang/test/SemaOpenCL/address-spaces.cl
@@ -231,12 +231,12 @@
 }
 #endif
 
-__private int func_return_priv(void);   //expected-error {{return value cannot be qualified with address space}}
-__global int func_return_global(void);  //expected-error {{return value cannot be qualified with address space}}
-__local int func_return_local(void);//expected-error {{return value cannot be qualified with address space}}
-__constant int func_return_constant(void);  //expected-error {{return value cannot be qualified with address space}}
+__private int func_return_priv(void);   //expected-error {{return type cannot be qualified with address space}}
+__global int func_return_global(void);  //expected-error {{return type cannot be qualified with address space}}
+__local int func_return_local(void);//expected-error {{return type cannot be qualified with address space}}
+__constant int func_return_constant(void);  //expected-error {{return type cannot be qualified with address space}}
 #if __OPENCL_C_VERSION__ >= 200
-__generic int func_return_generic(void);//expected-error {{return value cannot be qualified with address space}}
+__generic int func_return_generic(void);//expected-error {{return type cannot be qualified with address space}}
 #endif
 
 void func_multiple_addr(void) {
Index: clang/test/SemaHLSL/group_shared_202x.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/group_shared_202x.hlsl
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -std=hlsl202x  -o - -fsyntax-only %s -verify
+
+// expected-error@+1 {{return type cannot be qualified with address space}}
+auto func() -> groupshared void;
+
+// expected-error@+1 {{parameter may not be qualified with an address space}}
+auto func(float groupshared) -> void;
+
+// expected-error@+1 {{parameter 

[PATCH] D133668: [HLSL] Disable integer promotion to avoid int16_t being promoted to int for HLSL.

2022-10-19 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 468993.
python3kgae marked an inline comment as done.
python3kgae added a comment.
Herald added a subscriber: steakhal.
Herald added a reviewer: NoQ.

Move isPromotableIntegerType to ASTContext so it can access LangOpts.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133668/new/

https://reviews.llvm.org/D133668

Files:
  clang/include/clang/AST/ASTContext.h
  clang/include/clang/AST/CanonicalType.h
  clang/include/clang/AST/Type.h
  clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConv.h
  clang/lib/AST/ASTContext.cpp
  clang/lib/AST/FormatString.cpp
  clang/lib/AST/Type.cpp
  clang/lib/CodeGen/CGExprScalar.cpp
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/Sema/SemaChecking.cpp
  clang/lib/Sema/SemaDecl.cpp
  clang/lib/Sema/SemaExpr.cpp
  clang/lib/Sema/SemaInit.cpp
  clang/lib/Sema/SemaOverload.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/CodeGenHLSL/builtins/abs.hlsl
  clang/test/CodeGenHLSL/no_int_promotion.hlsl
  clang/test/SemaHLSL/BitInt128.hlsl

Index: clang/test/SemaHLSL/BitInt128.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BitInt128.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o - %s -verify
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+_BitInt(128) i128;
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+unsigned _BitInt(128) u128;
Index: clang/test/CodeGenHLSL/no_int_promotion.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/no_int_promotion.hlsl
@@ -0,0 +1,47 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+
+// FIXME: add test for char/int8_t/uint8_t when these types are supported in HLSL.
+//  See https://github.com/llvm/llvm-project/issues/58453.
+
+// Make sure generate i16 add.
+// CHECK: add nsw i16 %
+int16_t add(int16_t a, int16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+int16_t2 add(int16_t2 a, int16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+int16_t3 add(int16_t3 a, int16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+int16_t4 add(int16_t4 a, int16_t4 b) {
+  return a + b;
+}
+// CHECK: define noundef zeroext i16 @
+// CHECK: add i16 %
+uint16_t add(uint16_t a, uint16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+uint16_t2 add(uint16_t2 a, uint16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+uint16_t3 add(uint16_t3 a, uint16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+uint16_t4 add(uint16_t4 a, uint16_t4 b) {
+  return a + b;
+}
Index: clang/test/CodeGenHLSL/builtins/abs.hlsl
===
--- clang/test/CodeGenHLSL/builtins/abs.hlsl
+++ clang/test/CodeGenHLSL/builtins/abs.hlsl
@@ -7,8 +7,7 @@
 
 
 // CHECK: define noundef signext i16 @
-// FIXME: int16_t is promoted to i32 now. Change to abs.i16 once it is fixed.
-// CHECK: call i32 @llvm.abs.i32(
+// CHECK: call i16 @llvm.abs.i16(
 int16_t test_abs_int16_t ( int16_t p0 ) {
   return abs ( p0 );
 }
Index: clang/lib/Sema/SemaType.cpp
===
--- clang/lib/Sema/SemaType.cpp
+++ clang/lib/Sema/SemaType.cpp
@@ -5425,7 +5425,7 @@
   D.setInvalidType();
 }
   } else if (!FTI.hasPrototype) {
-if (ParamTy->isPromotableIntegerType()) {
+if (Context.isPromotableIntegerType(ParamTy)) {
   ParamTy = Context.getPromotedIntegerType(ParamTy);
   Param->setKNRPromoted(true);
 } else if (const BuiltinType* BTy = ParamTy->getAs()) {
Index: clang/lib/Sema/SemaOverload.cpp
===
--- clang/lib/Sema/SemaOverload.cpp
+++ clang/lib/Sema/SemaOverload.cpp
@@ -2078,9 +2078,9 @@
   // int can represent all the values of the source type; otherwise,
   // the source rvalue can be converted to an rvalue of type unsigned
   // int (C++ 4.5p1).
-  if (FromType->isPromotableIntegerType() && !FromType->isBooleanType() &&
+  if (Context.isPromotableIntegerType(FromType) && !FromType->isBooleanType() &&
   !FromType->isEnumeralType()) {
-if (// We can promote any signed, promotable integer type to an int
+if ( // We can promote any signed, promotable integer type to an int
 (FromType->isSignedIntegerType() ||
  // We can promote any unsigned integer type whose size is
  // less than int to an int.
Index: 

[PATCH] D135429: [HLSL] [DirectX backend] Move generateGlobalCtorDtorCalls into DirectX backend.

2022-10-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

gentle ping


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135429/new/

https://reviews.llvm.org/D135429

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


[PATCH] D133983: [HLSL] Add SV_DispatchThreadID

2022-10-18 Thread Xiang Li via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG14ae5d2b745f: [HLSL] Add SV_DispatchThreadID (authored by 
python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133983/new/

https://reviews.llvm.org/D133983

Files:
  clang/include/clang/Basic/Attr.td
  clang/include/clang/Basic/AttrDocs.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/lib/Parse/ParseHLSL.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenHLSL/semantics/DispatchThreadID.hlsl
  clang/test/CodeGenHLSL/sret_output.hlsl
  clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
  clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
  clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl

Index: clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl  -finclude-default-header -ast-dump  -o - %s | FileCheck %s
+
+[numthreads(8,8,1)]
+void CSMain(uint ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (uint)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:18 ID 'uint'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain1(uint2 ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain1 'void (uint2)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 ID 'uint2'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain2(uint3 ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain2 'void (uint3)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 ID 'uint3'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain3(uint3 : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain3 'void (uint3)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 'uint3'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
Index: clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -finclude-default-header -x hlsl -ast-dump -verify -o - %s
+
+[numthreads(8,8,1)]
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' only applies to a field or parameter of type 'uint/uint2/uint3'}}
+void CSMain(float ID : SV_DispatchThreadID) {
+
+}
+
+struct ST {
+  int a;
+  float b;
+};
+[numthreads(8,8,1)]
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' only applies to a field or parameter of type 'uint/uint2/uint3'}}
+void CSMain2(ST ID : SV_DispatchThreadID) {
+
+}
+
+void foo() {
+// expected-warning@+1 {{'SV_DispatchThreadID' attribute only applies to parameters and non-static data members}}
+  uint V : SV_DispatchThreadID;
+
+}
+
+struct ST2 {
+// expected-error@+1 {{use of undeclared identifier 'SV_DispatchThreadID'}}
+static uint X : SV_DispatchThreadID;
+// expected-error@+1 {{use of undeclared identifier 'SV_DispatchThreadID'}}
+uint s : SV_DispatchThreadID;
+};
Index: clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
===
--- clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
+++ clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
@@ -1,10 +1,13 @@
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s | FileCheck %s 
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-mesh -x hlsl -ast-dump -verify -o - %s 
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl  -finclude-default-header  -ast-dump -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-mesh -x hlsl -ast-dump  -finclude-default-header  -verify -o - %s
 
-[numthreads(8,8, 1)]
-// expected-error@+1 {{attribute 'SV_GroupIndex' is unsupported in Mesh shaders, requires Compute}}
-void CSMain(int GI : SV_GroupIndex) {
-// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (int)'
+[numthreads(8,8,1)]
+// expected-error@+2 {{attribute 'SV_GroupIndex' is unsupported in Mesh shaders, requires Compute}}
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' is unsupported in Mesh shaders, requires Compute}}
+void CSMain(int GI : SV_GroupIndex, uint ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (int, uint)'
 // CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:17 GI 'int'
 // CHECK-NEXT: HLSLSV_GroupIndexAttr
+// CHECK-NEXT: 

[PATCH] D133668: [HLSL] Disable int16_t to avoid promote to int for HLSL.

2022-10-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 468731.
python3kgae marked an inline comment as done.
python3kgae added a comment.

Update comment and fix tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133668/new/

https://reviews.llvm.org/D133668

Files:
  clang/lib/Sema/SemaExpr.cpp
  clang/test/CodeGenHLSL/builtins/abs.hlsl
  clang/test/CodeGenHLSL/no_int_promotion.hlsl
  clang/test/SemaHLSL/BitInt128.hlsl


Index: clang/test/SemaHLSL/BitInt128.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BitInt128.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o 
- %s -verify
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+_BitInt(128) i128;
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+unsigned _BitInt(128) u128;
Index: clang/test/CodeGenHLSL/no_int_promotion.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/no_int_promotion.hlsl
@@ -0,0 +1,47 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+
+// FIXME: add test for char/int8_t/uint8_t when these types are supported in 
HLSL.
+//  See https://github.com/llvm/llvm-project/issues/58453.
+
+// Make sure generate i16 add.
+// CHECK: add nsw i16 %
+int16_t add(int16_t a, int16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+int16_t2 add(int16_t2 a, int16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+int16_t3 add(int16_t3 a, int16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+int16_t4 add(int16_t4 a, int16_t4 b) {
+  return a + b;
+}
+// CHECK: define noundef zeroext i16 @
+// CHECK: add i16 %
+uint16_t add(uint16_t a, uint16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+uint16_t2 add(uint16_t2 a, uint16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+uint16_t3 add(uint16_t3 a, uint16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+uint16_t4 add(uint16_t4 a, uint16_t4 b) {
+  return a + b;
+}
Index: clang/test/CodeGenHLSL/builtins/abs.hlsl
===
--- clang/test/CodeGenHLSL/builtins/abs.hlsl
+++ clang/test/CodeGenHLSL/builtins/abs.hlsl
@@ -7,8 +7,7 @@
 
 
 // CHECK: define noundef signext i16 @
-// FIXME: int16_t is promoted to i32 now. Change to abs.i16 once it is fixed.
-// CHECK: call i32 @llvm.abs.i32(
+// CHECK: call i16 @llvm.abs.i16(
 int16_t test_abs_int16_t ( int16_t p0 ) {
   return abs ( p0 );
 }
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -837,7 +837,10 @@
   E = ImpCastExprToType(E, PTy, CK_IntegralCast).get();
   return E;
 }
-if (Ty->isPromotableIntegerType()) {
+if (Ty->isPromotableIntegerType() &&
+// HLSL doesn't promote all small integer types to int, it
+// just uses the rank-based promotion rules for all types.
+!getLangOpts().HLSL) {
   QualType PT = Context.getPromotedIntegerType(Ty);
   E = ImpCastExprToType(E, PT, CK_IntegralCast).get();
   return E;


Index: clang/test/SemaHLSL/BitInt128.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BitInt128.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o - %s -verify
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+_BitInt(128) i128;
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+unsigned _BitInt(128) u128;
Index: clang/test/CodeGenHLSL/no_int_promotion.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/no_int_promotion.hlsl
@@ -0,0 +1,47 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+
+// FIXME: add test for char/int8_t/uint8_t when these types are supported in HLSL.
+//  See https://github.com/llvm/llvm-project/issues/58453.
+
+// Make sure generate i16 add.
+// CHECK: add nsw i16 %
+int16_t add(int16_t a, int16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+int16_t2 add(int16_t2 a, int16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+int16_t3 add(int16_t3 a, int16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> 

[PATCH] D133983: [HLSL] Add SV_DispatchThreadID

2022-10-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 468706.
python3kgae added a comment.

More check on the ir.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133983/new/

https://reviews.llvm.org/D133983

Files:
  clang/include/clang/Basic/Attr.td
  clang/include/clang/Basic/AttrDocs.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/lib/Parse/ParseHLSL.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenHLSL/semantics/DispatchThreadID.hlsl
  clang/test/CodeGenHLSL/sret_output.hlsl
  clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
  clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
  clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl

Index: clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl  -finclude-default-header -ast-dump  -o - %s | FileCheck %s
+
+[numthreads(8,8,1)]
+void CSMain(uint ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (uint)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:18 ID 'uint'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain1(uint2 ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain1 'void (uint2)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 ID 'uint2'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain2(uint3 ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain2 'void (uint3)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 ID 'uint3'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain3(uint3 : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain3 'void (uint3)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 'uint3'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
Index: clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -finclude-default-header -x hlsl -ast-dump -verify -o - %s
+
+[numthreads(8,8,1)]
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' only applies to a field or parameter of type 'uint/uint2/uint3'}}
+void CSMain(float ID : SV_DispatchThreadID) {
+
+}
+
+struct ST {
+  int a;
+  float b;
+};
+[numthreads(8,8,1)]
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' only applies to a field or parameter of type 'uint/uint2/uint3'}}
+void CSMain2(ST ID : SV_DispatchThreadID) {
+
+}
+
+void foo() {
+// expected-warning@+1 {{'SV_DispatchThreadID' attribute only applies to parameters and non-static data members}}
+  uint V : SV_DispatchThreadID;
+
+}
+
+struct ST2 {
+// expected-error@+1 {{use of undeclared identifier 'SV_DispatchThreadID'}}
+static uint X : SV_DispatchThreadID;
+// expected-error@+1 {{use of undeclared identifier 'SV_DispatchThreadID'}}
+uint s : SV_DispatchThreadID;
+};
Index: clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
===
--- clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
+++ clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
@@ -1,10 +1,13 @@
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s | FileCheck %s 
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-mesh -x hlsl -ast-dump -verify -o - %s 
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl  -finclude-default-header  -ast-dump -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-mesh -x hlsl -ast-dump  -finclude-default-header  -verify -o - %s
 
-[numthreads(8,8, 1)]
-// expected-error@+1 {{attribute 'SV_GroupIndex' is unsupported in Mesh shaders, requires Compute}}
-void CSMain(int GI : SV_GroupIndex) {
-// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (int)'
+[numthreads(8,8,1)]
+// expected-error@+2 {{attribute 'SV_GroupIndex' is unsupported in Mesh shaders, requires Compute}}
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' is unsupported in Mesh shaders, requires Compute}}
+void CSMain(int GI : SV_GroupIndex, uint ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (int, uint)'
 // CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:17 GI 'int'
 // CHECK-NEXT: HLSLSV_GroupIndexAttr
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:42 ID 'uint'
+// 

[PATCH] D133983: [HLSL] Add SV_DispatchThreadID

2022-10-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 468700.
python3kgae added a comment.

Check sret parameter exist.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133983/new/

https://reviews.llvm.org/D133983

Files:
  clang/include/clang/Basic/Attr.td
  clang/include/clang/Basic/AttrDocs.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/lib/Parse/ParseHLSL.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGenHLSL/semantics/DispatchThreadID.hlsl
  clang/test/CodeGenHLSL/sret_output.hlsl
  clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
  clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
  clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl

Index: clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/Semantics/valid_entry_parameter.hlsl
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl  -finclude-default-header -ast-dump  -o - %s | FileCheck %s
+
+[numthreads(8,8,1)]
+void CSMain(uint ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (uint)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:18 ID 'uint'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain1(uint2 ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain1 'void (uint2)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 ID 'uint2'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain2(uint3 ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain2 'void (uint3)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 ID 'uint3'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
+[numthreads(8,8,1)]
+void CSMain3(uint3 : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain3 'void (uint3)'
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:20 'uint3'
+// CHECK-NEXT: HLSLSV_DispatchThreadIDAttr
+}
Index: clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -finclude-default-header -x hlsl -ast-dump -verify -o - %s
+
+[numthreads(8,8,1)]
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' only applies to a field or parameter of type 'uint/uint2/uint3'}}
+void CSMain(float ID : SV_DispatchThreadID) {
+
+}
+
+struct ST {
+  int a;
+  float b;
+};
+[numthreads(8,8,1)]
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' only applies to a field or parameter of type 'uint/uint2/uint3'}}
+void CSMain2(ST ID : SV_DispatchThreadID) {
+
+}
+
+void foo() {
+// expected-warning@+1 {{'SV_DispatchThreadID' attribute only applies to parameters and non-static data members}}
+  uint V : SV_DispatchThreadID;
+
+}
+
+struct ST2 {
+// expected-error@+1 {{use of undeclared identifier 'SV_DispatchThreadID'}}
+static uint X : SV_DispatchThreadID;
+// expected-error@+1 {{use of undeclared identifier 'SV_DispatchThreadID'}}
+uint s : SV_DispatchThreadID;
+};
Index: clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
===
--- clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
+++ clang/test/SemaHLSL/Semantics/entry_parameter.hlsl
@@ -1,10 +1,13 @@
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s | FileCheck %s 
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-mesh -x hlsl -ast-dump -verify -o - %s 
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl  -finclude-default-header  -ast-dump -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-mesh -x hlsl -ast-dump  -finclude-default-header  -verify -o - %s
 
-[numthreads(8,8, 1)]
-// expected-error@+1 {{attribute 'SV_GroupIndex' is unsupported in Mesh shaders, requires Compute}}
-void CSMain(int GI : SV_GroupIndex) {
-// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (int)'
+[numthreads(8,8,1)]
+// expected-error@+2 {{attribute 'SV_GroupIndex' is unsupported in Mesh shaders, requires Compute}}
+// expected-error@+1 {{attribute 'SV_DispatchThreadID' is unsupported in Mesh shaders, requires Compute}}
+void CSMain(int GI : SV_GroupIndex, uint ID : SV_DispatchThreadID) {
+// CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> line:[[@LINE-1]]:6 CSMain 'void (int, uint)'
 // CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:17 GI 'int'
 // CHECK-NEXT: HLSLSV_GroupIndexAttr
+// CHECK-NEXT: ParmVarDecl 0x{{[0-9a-fA-F]+}} <{{.*}}> col:42 ID 'uint'

[PATCH] D133668: [HLSL] Disable int16_t to avoid promote to int for HLSL.

2022-10-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added a comment.

In D133668#3847999 , @rjmccall wrote:

> If you have `char`, would you want it to promote?  Because turning `char` to 
> `_BitInt(8)` is breaking with C on other grounds (like aliasing), for better 
> or worse.  So if you just don't want promotion, maybe you really should just 
> disable promotion.

Hi @rjmccall,
Thanks for the review.
I've switched back to short and disabled the integer promotion for HLSL.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133668/new/

https://reviews.llvm.org/D133668

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


[PATCH] D133668: [HLSL] Use _BitInt(16) for int16_t to avoid promote to int.

2022-10-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 468617.
python3kgae added a comment.

Switch back to short and disable integer promote for hlsl.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133668/new/

https://reviews.llvm.org/D133668

Files:
  clang/lib/Sema/SemaExpr.cpp
  clang/test/CodeGenHLSL/basic_types.hlsl
  clang/test/CodeGenHLSL/builtins/abs.hlsl
  clang/test/CodeGenHLSL/int16_t_add.hlsl
  clang/test/SemaHLSL/BitInt128.hlsl


Index: clang/test/SemaHLSL/BitInt128.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BitInt128.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o 
- %s -verify
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+_BitInt(128) i128;
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+unsigned _BitInt(128) u128;
Index: clang/test/CodeGenHLSL/int16_t_add.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/int16_t_add.hlsl
@@ -0,0 +1,24 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+
+// Make sure generate i16 add.
+// CHECK: add nsw i16 %
+int16_t add(int16_t a, int16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+int16_t2 add(int16_t2 a, int16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+int16_t3 add(int16_t3 a, int16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+int16_t4 add(int16_t4 a, int16_t4 b) {
+  return a + b;
+}
Index: clang/test/CodeGenHLSL/builtins/abs.hlsl
===
--- clang/test/CodeGenHLSL/builtins/abs.hlsl
+++ clang/test/CodeGenHLSL/builtins/abs.hlsl
@@ -7,8 +7,7 @@
 
 
 // CHECK: define noundef signext i16 @
-// FIXME: int16_t is promoted to i32 now. Change to abs.i16 once it is fixed.
-// CHECK: call i32 @llvm.abs.i32(
+// CHECK: call i16 @llvm.abs.i16(
 int16_t test_abs_int16_t ( int16_t p0 ) {
   return abs ( p0 );
 }
Index: clang/test/CodeGenHLSL/basic_types.hlsl
===
--- clang/test/CodeGenHLSL/basic_types.hlsl
+++ clang/test/CodeGenHLSL/basic_types.hlsl
@@ -4,7 +4,7 @@
 
 
 // CHECK:"?uint16_t_Val@@3GA" = global i16 0, align 2
-// CHECK:"?int16_t_Val@@3FA" = global i16 0, align 2
+// CHECK:"?int16_t_Val@@3FA" = global i16 0
 // CHECK:"?uint_Val@@3IA" = global i32 0, align 4
 // CHECK:"?uint64_t_Val@@3KA" = global i64 0, align 8
 // CHECK:"?int64_t_Val@@3JA" = global i64 0, align 8
Index: clang/lib/Sema/SemaExpr.cpp
===
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -837,7 +837,9 @@
   E = ImpCastExprToType(E, PTy, CK_IntegralCast).get();
   return E;
 }
-if (Ty->isPromotableIntegerType()) {
+if (Ty->isPromotableIntegerType() &&
+// Avoid promote integer type to int.
+!getLangOpts().HLSL) {
   QualType PT = Context.getPromotedIntegerType(Ty);
   E = ImpCastExprToType(E, PT, CK_IntegralCast).get();
   return E;


Index: clang/test/SemaHLSL/BitInt128.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/BitInt128.hlsl
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -ast-dump -o - %s -verify
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+_BitInt(128) i128;
+
+// expected-error@+1 {{_BitInt is not supported on this target}}
+unsigned _BitInt(128) u128;
Index: clang/test/CodeGenHLSL/int16_t_add.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/int16_t_add.hlsl
@@ -0,0 +1,24 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s -D__HLSL_ENABLE_16_BIT \
+// RUN:   -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s
+
+// Make sure generate i16 add.
+// CHECK: add nsw i16 %
+int16_t add(int16_t a, int16_t b) {
+  return a + b;
+}
+// CHECK: define noundef <2 x i16> @
+// CHECK: add <2 x i16>
+int16_t2 add(int16_t2 a, int16_t2 b) {
+  return a + b;
+}
+// CHECK: define noundef <3 x i16> @
+// CHECK: add <3 x i16>
+int16_t3 add(int16_t3 a, int16_t3 b) {
+  return a + b;
+}
+// CHECK: define noundef <4 x i16> @
+// CHECK: add <4 x i16>
+int16_t4 add(int16_t4 a, int16_t4 b) {
+  return a + b;
+}
Index: clang/test/CodeGenHLSL/builtins/abs.hlsl
===
--- clang/test/CodeGenHLSL/builtins/abs.hlsl
+++ clang/test/CodeGenHLSL/builtins/abs.hlsl
@@ -7,8 +7,7 @@
 
 
 // CHECK: define noundef 

[PATCH] D136134: [NFC] [DirectX backend] move ResourceClass into llvm.

2022-10-18 Thread Xiang Li via Phabricator via cfe-commits
python3kgae created this revision.
python3kgae added reviewers: pow2clk, beanz, bogner.
Herald added a subscriber: Anastasia.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Move ResourceClass into llvm/Frontend/HLSL/HLSLResource.h so it could be shared 
between clang and DirectX backend.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D136134

Files:
  clang/include/clang/Basic/HLSLRuntime.h
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/lib/Sema/HLSLExternalSemaSource.cpp
  llvm/include/llvm/Frontend/HLSL/HLSLResource.h

Index: llvm/include/llvm/Frontend/HLSL/HLSLResource.h
===
--- llvm/include/llvm/Frontend/HLSL/HLSLResource.h
+++ llvm/include/llvm/Frontend/HLSL/HLSLResource.h
@@ -21,6 +21,15 @@
 
 namespace hlsl {
 
+enum class ResourceClass : uint8_t {
+  SRV = 0,
+  UAV,
+  CBuffer,
+  Sampler,
+  Invalid,
+  NumClasses = Invalid,
+};
+
 // The value ordering of this enumeration is part of the DXIL ABI. Elements
 // can only be added to the end, and not removed.
 enum class ResourceKind : uint32_t {
Index: clang/lib/Sema/HLSLExternalSemaSource.cpp
===
--- clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -17,11 +17,12 @@
 #include "clang/Basic/HLSLRuntime.h"
 #include "clang/Sema/Lookup.h"
 #include "clang/Sema/Sema.h"
+#include "llvm/Frontend/HLSL/HLSLResource.h"
 
 #include 
 
 using namespace clang;
-using namespace hlsl;
+using namespace llvm::hlsl;
 
 namespace {
 
Index: clang/lib/CodeGen/CGHLSLRuntime.h
===
--- clang/lib/CodeGen/CGHLSLRuntime.h
+++ clang/lib/CodeGen/CGHLSLRuntime.h
@@ -71,7 +71,7 @@
 protected:
   CodeGenModule 
   uint32_t ResourceCounters[static_cast(
-  hlsl::ResourceClass::NumClasses)] = {0};
+  llvm::hlsl::ResourceClass::NumClasses)] = {0};
 
   llvm::Value *emitInputSemantic(llvm::IRBuilder<> , const ParmVarDecl );
 
@@ -93,7 +93,7 @@
 private:
   void addBufferResourceAnnotation(llvm::GlobalVariable *GV,
llvm::StringRef TyName,
-   hlsl::ResourceClass RC,
+   llvm::hlsl::ResourceClass RC,
llvm::hlsl::ResourceKind RK,
BufferResBinding );
   void addConstant(VarDecl *D, Buffer );
Index: clang/lib/CodeGen/CGHLSLRuntime.cpp
===
--- clang/lib/CodeGen/CGHLSLRuntime.cpp
+++ clang/lib/CodeGen/CGHLSLRuntime.cpp
@@ -24,7 +24,7 @@
 
 using namespace clang;
 using namespace CodeGen;
-using namespace hlsl;
+using namespace clang::hlsl;
 using namespace llvm;
 
 namespace {
@@ -176,8 +176,9 @@
 layoutBuffer(Buf, DL);
 GlobalVariable *GV = replaceBuffer(Buf);
 M.getGlobalList().push_back(GV);
-hlsl::ResourceClass RC =
-Buf.IsCBuffer ? hlsl::ResourceClass::CBuffer : hlsl::ResourceClass::SRV;
+llvm::hlsl::ResourceClass RC = Buf.IsCBuffer
+   ? llvm::hlsl::ResourceClass::CBuffer
+   : llvm::hlsl::ResourceClass::SRV;
 llvm::hlsl::ResourceKind RK = Buf.IsCBuffer
   ? llvm::hlsl::ResourceKind::CBuffer
   : llvm::hlsl::ResourceKind::TBuffer;
@@ -193,7 +194,7 @@
 
 void CGHLSLRuntime::addBufferResourceAnnotation(llvm::GlobalVariable *GV,
 llvm::StringRef TyName,
-hlsl::ResourceClass RC,
+llvm::hlsl::ResourceClass RC,
 llvm::hlsl::ResourceKind RK,
 BufferResBinding ) {
   uint32_t Counter = ResourceCounters[static_cast(RC)]++;
@@ -201,13 +202,13 @@
 
   NamedMDNode *ResourceMD = nullptr;
   switch (RC) {
-  case hlsl::ResourceClass::UAV:
+  case llvm::hlsl::ResourceClass::UAV:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.uavs");
 break;
-  case hlsl::ResourceClass::SRV:
+  case llvm::hlsl::ResourceClass::SRV:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.srvs");
 break;
-  case hlsl::ResourceClass::CBuffer:
+  case llvm::hlsl::ResourceClass::CBuffer:
 ResourceMD = M.getOrInsertNamedMetadata("hlsl.cbufs");
 break;
   default:
@@ -290,8 +291,9 @@
 
   QualType QT(Ty, 0);
   BufferResBinding Binding(D->getAttr());
-  addBufferResourceAnnotation(
-  GV, QT.getAsString(), static_cast(RC), RK, Binding);
+  addBufferResourceAnnotation(GV, QT.getAsString(),
+  static_cast(RC), RK,
+  

[PATCH] D130951: [HLSL] CodeGen hlsl resource binding.

2022-10-17 Thread Xiang Li via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG13163dd8abc5: [HLSL] CodeGen hlsl resource binding. 
(authored by python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130951/new/

https://reviews.llvm.org/D130951

Files:
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/test/CodeGenHLSL/builtins/RWBuffer-annotations.hlsl
  clang/test/CodeGenHLSL/cbuf.hlsl
  llvm/include/llvm/Frontend/HLSL/HLSLResource.h
  llvm/lib/Frontend/HLSL/HLSLResource.cpp
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/UAVMetadata.ll

Index: llvm/test/CodeGen/DirectX/UAVMetadata.ll
===
--- llvm/test/CodeGen/DirectX/UAVMetadata.ll
+++ llvm/test/CodeGen/DirectX/UAVMetadata.ll
@@ -13,15 +13,15 @@
 ; PRINT-NEXT:; Name Type  Format Dim  ID  HLSL Bind  Count
 ; PRINT-NEXT:; -- -- --- --- --- -- --
 ; PRINT-NEXT:;   UAV f16 buf  U0 u0 1
-; PRINT-NEXT:;   UAV f32 buf  U1 u0 1
-; PRINT-NEXT:;   UAV f64 buf  U2 u0 1
-; PRINT-NEXT:;   UAV  i1 buf  U3 u0 2
-; PRINT-NEXT:;   UAVbyte r/w  U4 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U5 u0 1
-; PRINT-NEXT:;   UAV i32 buf  U6 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U7 u0 1
-; PRINT-NEXT:;   UAVbyte r/w  U8 u0 1
-; PRINT-NEXT:;   UAV u64 buf  U9 u0 1
+; PRINT-NEXT:;   UAV f32 buf  U1 u1 1
+; PRINT-NEXT:;   UAV f64 buf  U2 u2 1
+; PRINT-NEXT:;   UAV  i1 buf  U3 u3 2
+; PRINT-NEXT:;   UAVbyte r/w  U4 u5 1
+; PRINT-NEXT:;   UAV  struct r/w  U5 u6 1
+; PRINT-NEXT:;   UAV i32 buf  U6 u7 1
+; PRINT-NEXT:;   UAV  struct r/w  U7 u8 1
+; PRINT-NEXT:;   UAVbyte r/w  U8 u9 1
+; PRINT-NEXT:;   UAV u64 buf  U9 u10,space2 1
 
 @Zero = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
 @One = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
@@ -37,16 +37,16 @@
 
 !hlsl.uavs = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
 
-!0 = !{ptr @Zero, !"RWBuffer", i32 0}
-!1 = !{ptr @One, !"Buffer>", i32 1}
-!2 = !{ptr @Two, !"Buffer", i32 2}
-!3 = !{ptr @Three, !"Buffer", i32 3}
-!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4}
-!5 = !{ptr @Five, !"StructuredBuffer", i32 5}
-!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6}
-!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7}
-!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8}
-!9 = !{ptr @Nine, !"RWBuffer", i32 9}
+!0 = !{ptr @Zero, !"RWBuffer", i32 0, i32 10, i32 0, i32 0}
+!1 = !{ptr @One, !"Buffer>", i32 1, i32 10, i32 1, i32 0}
+!2 = !{ptr @Two, !"Buffer", i32 2, i32 10, i32 2, i32 0}
+!3 = !{ptr @Three, !"Buffer", i32 3, i32 10, i32 3, i32 0}
+!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4, i32 11, i32 5, i32 0}
+!5 = !{ptr @Five, !"StructuredBuffer", i32 5, i32 12, i32 6, i32 0}
+!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6, i32 10, i32 7, i32 0}
+!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7, i32 12, i32 8, i32 0}
+!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8, i32 11, i32 9, i32 0}
+!9 = !{ptr @Nine, !"RWBuffer", i32 9, i32 10, i32 10, i32 2}
 
 ; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}
 
@@ -57,21 +57,21 @@
 ; CHECK-SAME: [[Eight:[!][0-9]+]], [[Nine:[!][0-9]+]]}
 ; CHECK: [[Zero]] = !{i32 0, ptr @Zero, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, [[Half:[!][0-9]+]]}
 ; CHECK: [[Half]] = !{i32 0, i32 8}
-; CHECK: [[One]] = !{i32 1, ptr @One, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, 

[PATCH] D130951: [HLSL] CodeGen hlsl resource binding.

2022-10-17 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/lib/CodeGen/CGHLSLRuntime.h:73
   CodeGenModule 
   uint32_t ResourceCounters[static_cast(
   hlsl::ResourceClass::NumClasses)] = {0};

beanz wrote:
> The `ResourceCounters` here was a stand-in for allocating resource indices.
> 
> If you have a different path for allocating these, we shouldn't need the 
> counter anymore. I'm a little concerned that it looks like you're not 
> allocating these in code generation. Can you explain how you intend to 
> allocate indices? Is there a reason not to do this in code gen?
The reason not to do it in codeGen is that we have to remove unused global 
resources even in Od and update the ID in the backend.

The plan is to allocate the ID after unused global resources are deleted.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130951/new/

https://reviews.llvm.org/D130951

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


[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2022-10-15 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 468054.
python3kgae added a comment.

Rebase to fix stack patch


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

Files:
  llvm/lib/Target/DirectX/CBufferDataLayout.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.h
  llvm/lib/Target/DirectX/CMakeLists.txt
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/cbuf.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_0.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_1.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll

Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
@@ -0,0 +1,81 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer D
+; {
+;
+;   struct D
+;   {
+;
+;   int D0;   ; Offset:0
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:   16
+;   float3 B1;; Offset:   32
+;   float B2; ; Offset:   44
+;   double3 B3;   ; Offset:   48
+;   half B4;  ; Offset:   72
+;   double2 B5;   ; Offset:   80
+;   float B6; ; Offset:   96
+;   half3 B7; ; Offset:  100
+;   half3 B8; ; Offset:  106
+;   
+;   } D1; ; Offset:   16
+;
+;   half D2;  ; Offset:  112
+;   struct struct.C
+;   {
+;
+;   struct struct.A
+;   {
+;
+;   float A0; ; Offset:  128
+;   double A1;; Offset:  136
+;   float A2; ; Offset:  144
+;   half A3;  ; Offset:  148
+;   int16_t A4;   ; Offset:  150
+;   int64_t A5;   ; Offset:  152
+;   int A6;   ; Offset:  160
+;   
+;   } C0; ; Offset:  128
+;
+;   float C1[1];  ; Offset:  176
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:  192
+;   float3 B1;; Offset:  208
+;   float B2; ; Offset:  220
+;   double3 B3;   ; Offset:  224
+;   half B4;  ; Offset:  248
+;   double2 B5;   ; Offset:  256
+;   float B6; ; Offset:  272
+;   half3 B7; ; Offset:  276
+;   half3 B8; ; Offset:  282
+;   
+;   } C2[2];; ; Offset:  192
+;
+;   half C3;  ; Offset:  384
+;   
+;   } D3; ; Offset:  128
+;
+;   double D4;; Offset:  392
+;   
+;   } D;  ; Offset:0 Size:   400
+
+
+; Make sure the size is 400
+; DXILMD:!{i32 0, ptr @D.cb., !"", i32 0, i32 1, i32 1, i32 400}
+
+
+%struct.B = type <{ double, <3 x float>, float, <3 x double>, half, <2 x double>, float, <3 x half>, <3 x half> }>
+%struct.C = type <{ %struct.A, [1 x float], [2 x %struct.B], half }>
+%struct.A = type <{ float, double, float, half, i16, i64, i32 }>
+
+@D.cb. = external local_unnamed_addr constant { i32, %struct.B, half, %struct.C, double }
+
+!hlsl.cbufs = !{!0}
+!0 = !{ptr @D.cb., !"D.cb.ty", i32 0, i32 13, i32 1, i32 0}
Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
@@ -0,0 +1,51 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer B
+; {
+;
+;   struct B
+;   {
+;
+;   double B0[2]; ; Offset:0
+;  

[PATCH] D130951: [HLSL] CodeGen hlsl resource binding.

2022-10-15 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 468053.
python3kgae added a comment.

Rebase for D136031 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130951/new/

https://reviews.llvm.org/D130951

Files:
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/test/CodeGenHLSL/builtins/RWBuffer-annotations.hlsl
  clang/test/CodeGenHLSL/cbuf.hlsl
  llvm/include/llvm/Frontend/HLSL/HLSLResource.h
  llvm/lib/Frontend/HLSL/HLSLResource.cpp
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/UAVMetadata.ll

Index: llvm/test/CodeGen/DirectX/UAVMetadata.ll
===
--- llvm/test/CodeGen/DirectX/UAVMetadata.ll
+++ llvm/test/CodeGen/DirectX/UAVMetadata.ll
@@ -13,15 +13,15 @@
 ; PRINT-NEXT:; Name Type  Format Dim  ID  HLSL Bind  Count
 ; PRINT-NEXT:; -- -- --- --- --- -- --
 ; PRINT-NEXT:;   UAV f16 buf  U0 u0 1
-; PRINT-NEXT:;   UAV f32 buf  U1 u0 1
-; PRINT-NEXT:;   UAV f64 buf  U2 u0 1
-; PRINT-NEXT:;   UAV  i1 buf  U3 u0 2
-; PRINT-NEXT:;   UAVbyte r/w  U4 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U5 u0 1
-; PRINT-NEXT:;   UAV i32 buf  U6 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U7 u0 1
-; PRINT-NEXT:;   UAVbyte r/w  U8 u0 1
-; PRINT-NEXT:;   UAV u64 buf  U9 u0 1
+; PRINT-NEXT:;   UAV f32 buf  U1 u1 1
+; PRINT-NEXT:;   UAV f64 buf  U2 u2 1
+; PRINT-NEXT:;   UAV  i1 buf  U3 u3 2
+; PRINT-NEXT:;   UAVbyte r/w  U4 u5 1
+; PRINT-NEXT:;   UAV  struct r/w  U5 u6 1
+; PRINT-NEXT:;   UAV i32 buf  U6 u7 1
+; PRINT-NEXT:;   UAV  struct r/w  U7 u8 1
+; PRINT-NEXT:;   UAVbyte r/w  U8 u9 1
+; PRINT-NEXT:;   UAV u64 buf  U9 u10,space2 1
 
 @Zero = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
 @One = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
@@ -37,16 +37,16 @@
 
 !hlsl.uavs = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
 
-!0 = !{ptr @Zero, !"RWBuffer", i32 0}
-!1 = !{ptr @One, !"Buffer>", i32 1}
-!2 = !{ptr @Two, !"Buffer", i32 2}
-!3 = !{ptr @Three, !"Buffer", i32 3}
-!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4}
-!5 = !{ptr @Five, !"StructuredBuffer", i32 5}
-!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6}
-!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7}
-!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8}
-!9 = !{ptr @Nine, !"RWBuffer", i32 9}
+!0 = !{ptr @Zero, !"RWBuffer", i32 0, i32 10, i32 0, i32 0}
+!1 = !{ptr @One, !"Buffer>", i32 1, i32 10, i32 1, i32 0}
+!2 = !{ptr @Two, !"Buffer", i32 2, i32 10, i32 2, i32 0}
+!3 = !{ptr @Three, !"Buffer", i32 3, i32 10, i32 3, i32 0}
+!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4, i32 11, i32 5, i32 0}
+!5 = !{ptr @Five, !"StructuredBuffer", i32 5, i32 12, i32 6, i32 0}
+!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6, i32 10, i32 7, i32 0}
+!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7, i32 12, i32 8, i32 0}
+!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8, i32 11, i32 9, i32 0}
+!9 = !{ptr @Nine, !"RWBuffer", i32 9, i32 10, i32 10, i32 2}
 
 ; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}
 
@@ -57,21 +57,21 @@
 ; CHECK-SAME: [[Eight:[!][0-9]+]], [[Nine:[!][0-9]+]]}
 ; CHECK: [[Zero]] = !{i32 0, ptr @Zero, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, [[Half:[!][0-9]+]]}
 ; CHECK: [[Half]] = !{i32 0, i32 8}
-; CHECK: [[One]] = !{i32 1, ptr @One, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, [[Float:[!][0-9]+]]}
+; CHECK: [[One]] = !{i32 1, 

[PATCH] D136031: [DirectX backend] support ConstantBuffer to DXILResource.h

2022-10-15 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 468047.
python3kgae added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

arc diff `git merge-base HEAD origin` --update D136031 
 to fix the apply patch issue


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136031/new/

https://reviews.llvm.org/D136031

Files:
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/test/CodeGenHLSL/builtins/RWBuffer-annotations.hlsl
  clang/test/CodeGenHLSL/cbuf.hlsl
  llvm/include/llvm/Frontend/HLSL/HLSLResource.h
  llvm/lib/Frontend/HLSL/HLSLResource.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.cpp
  llvm/lib/Target/DirectX/CBufferDataLayout.h
  llvm/lib/Target/DirectX/CMakeLists.txt
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/UAVMetadata.ll
  llvm/test/CodeGen/DirectX/cbuf.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_0.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_1.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll
  llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll

Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
===
--- /dev/null
+++ llvm/test/CodeGen/DirectX/legacy_cb_layout_3.ll
@@ -0,0 +1,81 @@
+; RUN: opt -S -dxil-metadata-emit < %s | FileCheck %s --check-prefix=DXILMD
+
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-unknown-shadermodel6.7-library"
+
+; cbuffer D
+; {
+;
+;   struct D
+;   {
+;
+;   int D0;   ; Offset:0
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:   16
+;   float3 B1;; Offset:   32
+;   float B2; ; Offset:   44
+;   double3 B3;   ; Offset:   48
+;   half B4;  ; Offset:   72
+;   double2 B5;   ; Offset:   80
+;   float B6; ; Offset:   96
+;   half3 B7; ; Offset:  100
+;   half3 B8; ; Offset:  106
+;   
+;   } D1; ; Offset:   16
+;
+;   half D2;  ; Offset:  112
+;   struct struct.C
+;   {
+;
+;   struct struct.A
+;   {
+;
+;   float A0; ; Offset:  128
+;   double A1;; Offset:  136
+;   float A2; ; Offset:  144
+;   half A3;  ; Offset:  148
+;   int16_t A4;   ; Offset:  150
+;   int64_t A5;   ; Offset:  152
+;   int A6;   ; Offset:  160
+;   
+;   } C0; ; Offset:  128
+;
+;   float C1[1];  ; Offset:  176
+;   struct struct.B
+;   {
+;
+;   double B0;; Offset:  192
+;   float3 B1;; Offset:  208
+;   float B2; ; Offset:  220
+;   double3 B3;   ; Offset:  224
+;   half B4;  ; Offset:  248
+;   double2 B5;   ; Offset:  256
+;   float B6; ; Offset:  272
+;   half3 B7; ; Offset:  276
+;   half3 B8; ; Offset:  282
+;   
+;   } C2[2];; ; Offset:  192
+;
+;   half C3;  ; Offset:  384
+;   
+;   } D3; ; Offset:  128
+;
+;   double D4;; Offset:  392
+;   
+;   } D;  ; Offset:0 Size:   400
+
+
+; Make sure the size is 400
+; DXILMD:!{i32 0, ptr @D.cb., !"", i32 0, i32 1, i32 1, i32 400}
+
+
+%struct.B = type <{ double, <3 x float>, float, <3 x double>, half, <2 x double>, float, <3 x half>, <3 x half> }>
+%struct.C = type <{ %struct.A, [1 x float], [2 x %struct.B], half }>
+%struct.A = type <{ float, double, float, half, i16, i64, i32 }>
+
+@D.cb. = external local_unnamed_addr constant { i32, %struct.B, half, %struct.C, double }
+
+!hlsl.cbufs = !{!0}
+!0 = !{ptr @D.cb., !"D.cb.ty", i32 0, i32 13, i32 1, i32 0}
Index: llvm/test/CodeGen/DirectX/legacy_cb_layout_2.ll

[PATCH] D135721: [HLSL] Added HLSL this as a reference

2022-10-14 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: clang/lib/Sema/HLSLExternalSemaSource.cpp:179
+AST, SourceLocation(),
+Constructor->getThisType().getTypePtr()->getPointeeType(), true);
+This->setValueKind(ExprValueKind::VK_LValue);

gracejennings wrote:
> python3kgae wrote:
> > gracejennings wrote:
> > > python3kgae wrote:
> > > > Should this be a reference type?
> > > Could you expand on the question? I'm not sure I understand what you're 
> > > asking. The two changes in this file were made to update the previous 
> > > RWBuffer implementation
> > The current code will create CXXThisExpr with the pointeeType.
> > I thought it should be a reference type of the pointeeType.
> > 
> > Like in the test,
> > CXXThisExpr 0x{{[0-9A-Fa-f]+}} <> 'RWBuffer *' 
> > implicit this
> > 
> > The type is RWBuffer * before,
> > I expected this patch will change it to
> > RWBuffer &.
> The change that makes it more reference like than c++ from:
> 
> `-MemberExpr 0x{{[0-9A-Fa-f]+}}  'int' lvalue ->First 
> 0x{{[0-9A-Fa-f]+}}`
> `-CXXThisExpr 0x{{[0-9A-Fa-f]+}}  'Pair *' this`
> 
> to hlsl with this change
> 
> `-MemberExpr 0x{{[0-9A-Fa-f]+}}  'int' lvalue .First 
> 0x{{[0-9A-Fa-f]+}}`
> `-CXXThisExpr 0x{{[0-9A-Fa-f]+}}  'Pair' lvalue this`
I guess we have to change clang codeGen for this anyway.

Not sure which has less impact for codeGen side,  lvalue like what is in the 
current patch or make it a lvalue reference? My feeling is lvalue reference 
might be eaiser.

Did you test what needs to change for clang codeGen on top of the current patch?



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135721/new/

https://reviews.llvm.org/D135721

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


[PATCH] D130951: [HLSL] CodeGen hlsl resource binding.

2022-10-14 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 467909.
python3kgae marked 3 inline comments as done.
python3kgae added a comment.

Rebase to use FrontendResource.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130951/new/

https://reviews.llvm.org/D130951

Files:
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/test/CodeGenHLSL/builtins/RWBuffer-annotations.hlsl
  clang/test/CodeGenHLSL/cbuf.hlsl
  llvm/include/llvm/Frontend/HLSL/HLSLResource.h
  llvm/lib/Frontend/HLSL/HLSLResource.cpp
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/UAVMetadata.ll

Index: llvm/test/CodeGen/DirectX/UAVMetadata.ll
===
--- llvm/test/CodeGen/DirectX/UAVMetadata.ll
+++ llvm/test/CodeGen/DirectX/UAVMetadata.ll
@@ -13,15 +13,15 @@
 ; PRINT-NEXT:; Name Type  Format Dim  ID  HLSL Bind  Count
 ; PRINT-NEXT:; -- -- --- --- --- -- --
 ; PRINT-NEXT:;   UAV f16 buf  U0 u0 1
-; PRINT-NEXT:;   UAV f32 buf  U1 u0 1
-; PRINT-NEXT:;   UAV f64 buf  U2 u0 1
-; PRINT-NEXT:;   UAV  i1 buf  U3 u0 2
-; PRINT-NEXT:;   UAVbyte r/w  U4 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U5 u0 1
-; PRINT-NEXT:;   UAV i32 buf  U6 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U7 u0 1
-; PRINT-NEXT:;   UAVbyte r/w  U8 u0 1
-; PRINT-NEXT:;   UAV u64 buf  U9 u0 1
+; PRINT-NEXT:;   UAV f32 buf  U1 u1 1
+; PRINT-NEXT:;   UAV f64 buf  U2 u2 1
+; PRINT-NEXT:;   UAV  i1 buf  U3 u3 2
+; PRINT-NEXT:;   UAVbyte r/w  U4 u5 1
+; PRINT-NEXT:;   UAV  struct r/w  U5 u6 1
+; PRINT-NEXT:;   UAV i32 buf  U6 u7 1
+; PRINT-NEXT:;   UAV  struct r/w  U7 u8 1
+; PRINT-NEXT:;   UAVbyte r/w  U8 u9 1
+; PRINT-NEXT:;   UAV u64 buf  U9 u10,space2 1
 
 @Zero = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
 @One = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
@@ -37,16 +37,16 @@
 
 !hlsl.uavs = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
 
-!0 = !{ptr @Zero, !"RWBuffer", i32 0}
-!1 = !{ptr @One, !"Buffer>", i32 1}
-!2 = !{ptr @Two, !"Buffer", i32 2}
-!3 = !{ptr @Three, !"Buffer", i32 3}
-!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4}
-!5 = !{ptr @Five, !"StructuredBuffer", i32 5}
-!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6}
-!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7}
-!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8}
-!9 = !{ptr @Nine, !"RWBuffer", i32 9}
+!0 = !{ptr @Zero, !"RWBuffer", i32 0, i32 10, i32 0, i32 0}
+!1 = !{ptr @One, !"Buffer>", i32 1, i32 10, i32 1, i32 0}
+!2 = !{ptr @Two, !"Buffer", i32 2, i32 10, i32 2, i32 0}
+!3 = !{ptr @Three, !"Buffer", i32 3, i32 10, i32 3, i32 0}
+!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4, i32 11, i32 5, i32 0}
+!5 = !{ptr @Five, !"StructuredBuffer", i32 5, i32 12, i32 6, i32 0}
+!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6, i32 10, i32 7, i32 0}
+!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7, i32 12, i32 8, i32 0}
+!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8, i32 11, i32 9, i32 0}
+!9 = !{ptr @Nine, !"RWBuffer", i32 9, i32 10, i32 10, i32 2}
 
 ; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}
 
@@ -57,21 +57,21 @@
 ; CHECK-SAME: [[Eight:[!][0-9]+]], [[Nine:[!][0-9]+]]}
 ; CHECK: [[Zero]] = !{i32 0, ptr @Zero, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, [[Half:[!][0-9]+]]}
 ; CHECK: [[Half]] = !{i32 0, i32 8}
-; CHECK: [[One]] = !{i32 1, ptr @One, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, [[Float:[!][0-9]+]]}
+; 

[PATCH] D130951: [HLSL] CodeGen hlsl resource binding.

2022-10-14 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 467812.
python3kgae added a comment.

Fix clang-format missed by arc lint


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130951/new/

https://reviews.llvm.org/D130951

Files:
  clang/include/clang/Basic/HLSLRuntime.h
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/test/CodeGenHLSL/builtins/RWBuffer-annotations.hlsl
  clang/test/CodeGenHLSL/cbuf.hlsl
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/UAVMetadata.ll

Index: llvm/test/CodeGen/DirectX/UAVMetadata.ll
===
--- llvm/test/CodeGen/DirectX/UAVMetadata.ll
+++ llvm/test/CodeGen/DirectX/UAVMetadata.ll
@@ -12,15 +12,15 @@
 ; PRINT-NEXT:; Name Type  Format Dim  ID  HLSL Bind  Count
 ; PRINT-NEXT:; -- -- --- --- --- -- --
 ; PRINT-NEXT:;   UAV f16 buf  U0 u0 1
-; PRINT-NEXT:;   UAV f32 buf  U1 u0 1
-; PRINT-NEXT:;   UAV f64 buf  U2 u0 1
-; PRINT-NEXT:;   UAV  i1 buf  U3 u0 2
-; PRINT-NEXT:;   UAVbyte r/w  U4 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U5 u0 1
-; PRINT-NEXT:;   UAV i32 buf  U6 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U7 u0 1
-; PRINT-NEXT:;   UAVbyte r/w  U8 u0 1
-; PRINT-NEXT:;   UAV u64 buf  U9 u0 1
+; PRINT-NEXT:;   UAV f32 buf  U1 u1 1
+; PRINT-NEXT:;   UAV f64 buf  U2 u2 1
+; PRINT-NEXT:;   UAV  i1 buf  U3 u3 2
+; PRINT-NEXT:;   UAVbyte r/w  U4 u5 1
+; PRINT-NEXT:;   UAV  struct r/w  U5 u6 1
+; PRINT-NEXT:;   UAV i32 buf  U6 u7 1
+; PRINT-NEXT:;   UAV  struct r/w  U7 u8 1
+; PRINT-NEXT:;   UAVbyte r/w  U8 u9 1
+; PRINT-NEXT:;   UAV u64 buf  U9 u10,space2 1
 
 @Zero = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
 @One = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
@@ -36,16 +36,16 @@
 
 !hlsl.uavs = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
 
-!0 = !{ptr @Zero, !"RWBuffer", i32 0}
-!1 = !{ptr @One, !"Buffer>", i32 1}
-!2 = !{ptr @Two, !"Buffer", i32 2}
-!3 = !{ptr @Three, !"Buffer", i32 3}
-!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4}
-!5 = !{ptr @Five, !"StructuredBuffer", i32 5}
-!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6}
-!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7}
-!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8}
-!9 = !{ptr @Nine, !"RWBuffer", i32 9}
+!0 = !{ptr @Zero, !"RWBuffer", i32 0, i32 10, i32 0, i32 0}
+!1 = !{ptr @One, !"Buffer>", i32 1, i32 10, i32 1, i32 0}
+!2 = !{ptr @Two, !"Buffer", i32 2, i32 10, i32 2, i32 0}
+!3 = !{ptr @Three, !"Buffer", i32 3, i32 10, i32 3, i32 0}
+!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4, i32 11, i32 5, i32 0}
+!5 = !{ptr @Five, !"StructuredBuffer", i32 5, i32 12, i32 6, i32 0}
+!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6, i32 10, i32 7, i32 0}
+!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7, i32 12, i32 8, i32 0}
+!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8, i32 11, i32 9, i32 0}
+!9 = !{ptr @Nine, !"RWBuffer", i32 9, i32 10, i32 10, i32 2}
 
 ; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}
 
@@ -56,21 +56,21 @@
 ; CHECK-SAME: [[Eight:[!][0-9]+]], [[Nine:[!][0-9]+]]}
 ; CHECK: [[Zero]] = !{i32 0, ptr @Zero, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, [[Half:[!][0-9]+]]}
 ; CHECK: [[Half]] = !{i32 0, i32 8}
-; CHECK: [[One]] = !{i32 1, ptr @One, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, [[Float:[!][0-9]+]]}
+; CHECK: [[One]] = !{i32 1, ptr @One, !"", i32 0, i32 1, i32 1, i32 10, i1 false, i1 false, i1 

[PATCH] D130951: [HLSL] CodeGen hlsl resource binding.

2022-10-13 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 467631.
python3kgae added a comment.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.

Add resource shape to metadata.
Conflict with https://reviews.llvm.org/D135110, will rebase once 
https://reviews.llvm.org/D135110 is in.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130951/new/

https://reviews.llvm.org/D130951

Files:
  clang/include/clang/Basic/HLSLRuntime.h
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/test/CodeGenHLSL/builtins/RWBuffer-annotations.hlsl
  clang/test/CodeGenHLSL/cbuf.hlsl
  llvm/lib/Target/DirectX/DXILResource.cpp
  llvm/lib/Target/DirectX/DXILResource.h
  llvm/test/CodeGen/DirectX/UAVMetadata.ll

Index: llvm/test/CodeGen/DirectX/UAVMetadata.ll
===
--- llvm/test/CodeGen/DirectX/UAVMetadata.ll
+++ llvm/test/CodeGen/DirectX/UAVMetadata.ll
@@ -12,15 +12,15 @@
 ; PRINT-NEXT:; Name Type  Format Dim  ID  HLSL Bind  Count
 ; PRINT-NEXT:; -- -- --- --- --- -- --
 ; PRINT-NEXT:;   UAV f16 buf  U0 u0 1
-; PRINT-NEXT:;   UAV f32 buf  U1 u0 1
-; PRINT-NEXT:;   UAV f64 buf  U2 u0 1
-; PRINT-NEXT:;   UAV  i1 buf  U3 u0 2
-; PRINT-NEXT:;   UAVbyte r/w  U4 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U5 u0 1
-; PRINT-NEXT:;   UAV i32 buf  U6 u0 1
-; PRINT-NEXT:;   UAV  struct r/w  U7 u0 1
-; PRINT-NEXT:;   UAVbyte r/w  U8 u0 1
-; PRINT-NEXT:;   UAV u64 buf  U9 u0 1
+; PRINT-NEXT:;   UAV f32 buf  U1 u1 1
+; PRINT-NEXT:;   UAV f64 buf  U2 u2 1
+; PRINT-NEXT:;   UAV  i1 buf  U3 u3 2
+; PRINT-NEXT:;   UAVbyte r/w  U4 u5 1
+; PRINT-NEXT:;   UAV  struct r/w  U5 u6 1
+; PRINT-NEXT:;   UAV i32 buf  U6 u7 1
+; PRINT-NEXT:;   UAV  struct r/w  U7 u8 1
+; PRINT-NEXT:;   UAVbyte r/w  U8 u9 1
+; PRINT-NEXT:;   UAV u64 buf  U9 u10,space2 1
 
 @Zero = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
 @One = local_unnamed_addr global %"class.hlsl::RWBuffer" zeroinitializer, align 4
@@ -36,16 +36,16 @@
 
 !hlsl.uavs = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9}
 
-!0 = !{ptr @Zero, !"RWBuffer", i32 0}
-!1 = !{ptr @One, !"Buffer>", i32 1}
-!2 = !{ptr @Two, !"Buffer", i32 2}
-!3 = !{ptr @Three, !"Buffer", i32 3}
-!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4}
-!5 = !{ptr @Five, !"StructuredBuffer", i32 5}
-!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6}
-!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7}
-!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8}
-!9 = !{ptr @Nine, !"RWBuffer", i32 9}
+!0 = !{ptr @Zero, !"RWBuffer", i32 0, i32 10, i32 0, i32 0}
+!1 = !{ptr @One, !"Buffer>", i32 1, i32 10, i32 1, i32 0}
+!2 = !{ptr @Two, !"Buffer", i32 2, i32 10, i32 2, i32 0}
+!3 = !{ptr @Three, !"Buffer", i32 3, i32 10, i32 3, i32 0}
+!4 = !{ptr @Four, !"ByteAddressBuffer", i32 4, i32 11, i32 5, i32 0}
+!5 = !{ptr @Five, !"StructuredBuffer", i32 5, i32 12, i32 6, i32 0}
+!6 = !{ptr @Six, !"RasterizerOrderedBuffer", i32 6, i32 10, i32 7, i32 0}
+!7 = !{ptr @Seven, !"RasterizerOrderedStructuredBuffer", i32 7, i32 12, i32 8, i32 0}
+!8 = !{ptr @Eight, !"RasterizerOrderedByteAddressBuffer", i32 8, i32 11, i32 9, i32 0}
+!9 = !{ptr @Nine, !"RWBuffer", i32 9, i32 10, i32 10, i32 2}
 
 ; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}
 
@@ -56,21 +56,21 @@
 ; CHECK-SAME: [[Eight:[!][0-9]+]], [[Nine:[!][0-9]+]]}
 ; CHECK: [[Zero]] = !{i32 0, ptr @Zero, !"", i32 0, i32 0, i32 1, i32 10, i1 false, i1 false, i1 false, [[Half:[!][0-9]+]]}
 ; CHECK: [[Half]] = !{i32 0, i32 8}
-; CHECK: [[One]] = !{i32 1, ptr 

[PATCH] D135110: [NFC] [HLSL] Move common metadata to LLVMFrontend

2022-10-13 Thread Xiang Li via Phabricator via cfe-commits
python3kgae added inline comments.



Comment at: llvm/lib/Target/DirectX/DXILResource.h:46
   // can only be added to the end, and not removed.
   enum class Kinds : uint32_t {
 Invalid = 0,

Could we move ResourceBase::Kinds to Frontend/HLSL/HLSLResource.h so we can 
share it between clang and llvm?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135110/new/

https://reviews.llvm.org/D135110

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


[PATCH] D135060: [HLSL] Add groupshare address space.

2022-10-13 Thread Xiang Li via Phabricator via cfe-commits
python3kgae updated this revision to Diff 467383.
python3kgae marked an inline comment as done.
python3kgae added a comment.

Add hlsl202x test for C++ 11 features like lambda.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135060/new/

https://reviews.llvm.org/D135060

Files:
  clang/include/clang/Basic/AddressSpaces.h
  clang/include/clang/Basic/Attr.td
  clang/include/clang/Basic/AttrDocs.td
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Basic/TokenKinds.def
  clang/include/clang/Parse/Parser.h
  clang/include/clang/Sema/ParsedAttr.h
  clang/lib/AST/ASTContext.cpp
  clang/lib/AST/TypePrinter.cpp
  clang/lib/Basic/Targets/AMDGPU.cpp
  clang/lib/Basic/Targets/DirectX.h
  clang/lib/Basic/Targets/NVPTX.h
  clang/lib/Basic/Targets/SPIR.h
  clang/lib/Basic/Targets/TCE.h
  clang/lib/Basic/Targets/X86.h
  clang/lib/Parse/ParseDecl.cpp
  clang/lib/Parse/ParseExprCXX.cpp
  clang/lib/Parse/ParseTentative.cpp
  clang/lib/Sema/SemaDecl.cpp
  clang/lib/Sema/SemaLambda.cpp
  clang/lib/Sema/SemaType.cpp
  clang/test/AST/HLSL/group_shared.hlsl
  clang/test/CodeGenHLSL/group_shared.hlsl
  clang/test/Parser/opencl-cxx-keywords.cl
  clang/test/ParserHLSL/group_shared.hlsl
  clang/test/ParserHLSL/group_shared_202x.hlsl
  clang/test/SemaHLSL/group_shared.hlsl
  clang/test/SemaHLSL/group_shared_202x.hlsl
  clang/test/SemaOpenCL/address-spaces.cl
  clang/test/SemaOpenCL/invalid-kernel.cl
  clang/test/SemaTemplate/address_space-dependent.cpp

Index: clang/test/SemaTemplate/address_space-dependent.cpp
===
--- clang/test/SemaTemplate/address_space-dependent.cpp
+++ clang/test/SemaTemplate/address_space-dependent.cpp
@@ -43,7 +43,7 @@
 
 template 
 void tooBig() {
-  __attribute__((address_space(I))) int *bounds; // expected-error {{address space is larger than the maximum supported (8388588)}}
+  __attribute__((address_space(I))) int *bounds; // expected-error {{address space is larger than the maximum supported (8388587)}}
 }
 
 template 
Index: clang/test/SemaOpenCL/invalid-kernel.cl
===
--- clang/test/SemaOpenCL/invalid-kernel.cl
+++ clang/test/SemaOpenCL/invalid-kernel.cl
@@ -13,14 +13,14 @@
   return 0;
 }
 
-int* global x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* global x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
 
-int* local x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* local x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
 
-int* constant x(int* x) { // expected-error {{return value cannot be qualified with address space}}
+int* constant x(int* x) { // expected-error {{return type cannot be qualified with address space}}
   return x + 1;
 }
Index: clang/test/SemaOpenCL/address-spaces.cl
===
--- clang/test/SemaOpenCL/address-spaces.cl
+++ clang/test/SemaOpenCL/address-spaces.cl
@@ -231,12 +231,12 @@
 }
 #endif
 
-__private int func_return_priv(void);   //expected-error {{return value cannot be qualified with address space}}
-__global int func_return_global(void);  //expected-error {{return value cannot be qualified with address space}}
-__local int func_return_local(void);//expected-error {{return value cannot be qualified with address space}}
-__constant int func_return_constant(void);  //expected-error {{return value cannot be qualified with address space}}
+__private int func_return_priv(void);   //expected-error {{return type cannot be qualified with address space}}
+__global int func_return_global(void);  //expected-error {{return type cannot be qualified with address space}}
+__local int func_return_local(void);//expected-error {{return type cannot be qualified with address space}}
+__constant int func_return_constant(void);  //expected-error {{return type cannot be qualified with address space}}
 #if __OPENCL_C_VERSION__ >= 200
-__generic int func_return_generic(void);//expected-error {{return value cannot be qualified with address space}}
+__generic int func_return_generic(void);//expected-error {{return type cannot be qualified with address space}}
 #endif
 
 void func_multiple_addr(void) {
Index: clang/test/SemaHLSL/group_shared_202x.hlsl
===
--- /dev/null
+++ clang/test/SemaHLSL/group_shared_202x.hlsl
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -std=hlsl202x  -o - -fsyntax-only %s -verify
+
+// expected-error@+1 {{return type cannot be qualified with address space}}
+auto func() -> groupshared void;
+
+// expected-error@+1 {{parameter may not be qualified with an address space}}
+auto func(float 

[PATCH] D135060: [HLSL] Add groupshare address space.

2022-10-13 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked 2 inline comments as done.
python3kgae added inline comments.



Comment at: clang/test/ParserHLSL/group_shared.hlsl:11
+// expected-warning@+1 {{'auto' type specifier is a C++11 extension}}
+auto l = []() groupshared  {};
+

beanz wrote:
> What happens to this if you set the language standard to hlsl 202x? I setup 
> 202x in Clang to be C++11-based since I think that is the direction 202x will 
> take (still a lot unsure about the exact features).
hlsl 202x works!
I'll need to add more tests for hlsl 202x since lambda compiles.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135060/new/

https://reviews.llvm.org/D135060

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


[PATCH] D130131: [HLSL] CodeGen hlsl cbuffer/tbuffer.

2022-10-12 Thread Xiang Li via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
python3kgae marked an inline comment as done.
Closed by commit rGebe9c7f3e2da: [HLSL] CodeGen hlsl cbuffer/tbuffer. (authored 
by python3kgae).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130131/new/

https://reviews.llvm.org/D130131

Files:
  clang/lib/CodeGen/CGDecl.cpp
  clang/lib/CodeGen/CGHLSLRuntime.cpp
  clang/lib/CodeGen/CGHLSLRuntime.h
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/test/CodeGenHLSL/cbuf.hlsl
  clang/test/CodeGenHLSL/cbuf_in_namespace.hlsl
  clang/test/CodeGenHLSL/static_global_and_function_in_cb.hlsl

Index: clang/test/CodeGenHLSL/static_global_and_function_in_cb.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/static_global_and_function_in_cb.hlsl
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s \
+// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s
+
+// CHECK-DAG: @[[CB:.+]] = external constant { float }
+
+cbuffer A {
+float a;
+  // CHECK-DAG:@b = internal global float 3.00e+00, align 4
+  static float b = 3;
+  // CHECK:load float, ptr @[[CB]], align 4
+  // CHECK:load float, ptr @b, align 4
+  float foo() { return a + b; }
+}
+
+float bar() {
+  return foo();
+}
Index: clang/test/CodeGenHLSL/cbuf_in_namespace.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/cbuf_in_namespace.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s \
+// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s
+
+// Make sure cbuffer inside namespace works.
+// CHECK: @[[CB:.+]] = external constant { float }
+// CHECK: @[[TB:.+]] = external constant { float }
+namespace n0 {
+namespace n1 {
+  cbuffer A {
+float a;
+  }
+}
+  tbuffer B {
+float b;
+  }
+}
+
+float foo() {
+// CHECK: load float, ptr @[[CB]], align 4
+// CHECK: load float, ptr @[[TB]], align 4
+  return n0::n1::a + n0::b;
+}
Index: clang/test/CodeGenHLSL/cbuf.hlsl
===
--- /dev/null
+++ clang/test/CodeGenHLSL/cbuf.hlsl
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
+// RUN:   dxil-pc-shadermodel6.3-library %s \
+// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s
+
+// CHECK: @[[CB:.+]] = external constant { float, double }
+cbuffer A : register(b0, space1) {
+  float a;
+  double b;
+}
+
+// CHECK: @[[TB:.+]] = external constant { float, double }
+tbuffer A : register(t2, space1) {
+  float c;
+  double d;
+}
+
+float foo() {
+// CHECK: load float, ptr @[[CB]], align 4
+// CHECK: load double, ptr getelementptr inbounds ({ float, double }, ptr @[[CB]], i32 0, i32 1), align 8
+// CHECK: load float, ptr @[[TB]], align 4
+// CHECK: load double, ptr getelementptr inbounds ({ float, double }, ptr @[[TB]], i32 0, i32 1), align 8
+  return a + b + c*d;
+}
Index: clang/lib/CodeGen/CodeGenModule.cpp
===
--- clang/lib/CodeGen/CodeGenModule.cpp
+++ clang/lib/CodeGen/CodeGenModule.cpp
@@ -6451,6 +6451,10 @@
 DI->EmitAndRetainType(getContext().getEnumType(cast(D)));
 break;
 
+  case Decl::HLSLBuffer:
+getHLSLRuntime().addBuffer(cast(D));
+break;
+
   default:
 // Make sure we handled everything we should, every other kind is a
 // non-top-level decl.  FIXME: Would be nice to have an isTopLevelDeclKind
Index: clang/lib/CodeGen/CGHLSLRuntime.h
===
--- clang/lib/CodeGen/CGHLSLRuntime.h
+++ clang/lib/CodeGen/CGHLSLRuntime.h
@@ -19,13 +19,25 @@
 
 #include "clang/Basic/HLSLRuntime.h"
 
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+
+#include 
+
 namespace llvm {
 class GlobalVariable;
 class Function;
+class StructType;
 } // namespace llvm
+
 namespace clang {
 class VarDecl;
 class ParmVarDecl;
+class HLSLBufferDecl;
+class CallExpr;
+class Type;
+class DeclContext;
 
 class FunctionDecl;
 
@@ -34,6 +46,19 @@
 class CodeGenModule;
 
 class CGHLSLRuntime {
+public:
+  struct Buffer {
+Buffer(const HLSLBufferDecl *D);
+llvm::StringRef Name;
+// IsCBuffer - Whether the buffer is a cbuffer (and not a tbuffer).
+bool IsCBuffer;
+llvm::Optional Reg;
+unsigned Space;
+// Global variable and offset for each constant.
+std::vector> Constants;
+llvm::StructType *LayoutStruct = nullptr;
+  };
+
 protected:
   CodeGenModule 
   uint32_t ResourceCounters[static_cast(
@@ -48,11 +73,18 @@
   void annotateHLSLResource(const VarDecl *D, llvm::GlobalVariable *GV);
   void generateGlobalCtorDtorCalls();
 
+  void addBuffer(const 

[PATCH] D130131: [HLSL] CodeGen hlsl cbuffer/tbuffer.

2022-10-12 Thread Xiang Li via Phabricator via cfe-commits
python3kgae marked an inline comment as done.
python3kgae added inline comments.



Comment at: clang/lib/CodeGen/CGDecl.cpp:131
   case Decl::RequiresExprBody:
+  case Decl::HLSLBuffer:
 // None of these decls require codegen support.

efriedma wrote:
> I'm a little confused by this.  If it's possible to declare an HLSLBuffer 
> inside a function, why don't you need to handle it?  If it isn't possible to 
> declare an HLSLBuffer this way, can you just move this to use the 
> llvm_unreachable()?
Nice catch.
Fixed.



Comment at: clang/lib/CodeGen/CGHLSLRuntime.cpp:112
+// Replace.
+GV->replaceAllUsesWith(GEP);
+// Erase GV.

efriedma wrote:
> Messing with globals like this feels a little weird, but I guess it's fine if 
> nothing actually tries to use the erased globals after this code runs.  I'm a 
> little concerned that someone might accidentally rearrange the relevant code 
> in the future (CodeGenModule has a bunch of maps which aren't cleared before 
> this code runs).
These globals should not be in any map except Buf.Constants which is used here.
If another map has these globals, we should remove them from the map.
Cannot see any other map has these globals now.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130131/new/

https://reviews.llvm.org/D130131

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


  1   2   3   4   5   >