13 Commits

Author SHA1 Message Date
Chris B
9434c08347
[HLSL] Implement array temporary support (#79382)
HLSL constant sized array function parameters do not decay to pointers.
Instead constant sized array types are preserved as unique types for
overload resolution, template instantiation and name mangling.

This implements the change by adding a new `ArrayParameterType` which
represents a non-decaying `ConstantArrayType`. The new type behaves the
same as `ConstantArrayType` except that it does not decay to a pointer.

Values of `ConstantArrayType` in HLSL decay during overload resolution
via a new `HLSLArrayRValue` cast to `ArrayParameterType`.

`ArrayParamterType` values are passed indirectly by-value to functions
in IR generation resulting in callee generated memcpy instructions.

The behavior of HLSL function calls is documented in the [draft language
specification](https://microsoft.github.io/hlsl-specs/specs/hlsl.pdf)
under the Expr.Post.Call heading.

Additionally the design of this implementation approach is documented in
[Clang's
documentation](https://clang.llvm.org/docs/HLSL/FunctionCalls.html)

Resolves #70123
2024-04-01 12:10:10 -05:00
Chris B
48a1a9b260
[HLSL][docs] Document hlsl.h in the HLSL docs (#84081)
This adds a brief blurb about hlsl.h in the HLSLSupport documentation
where a high level view of the architecture is explained.
2024-03-20 10:16:17 -05:00
Nathan Sidwell
8e22fffc85 [clang] Remove trailing whitespace
Fix commit 66f6929fec3ae
2024-02-24 12:25:08 -05:00
Chris B
66f6929fec
[HLSL][Doc] Add doc about expected differences (#82395)
This document covers expected differences between Clang and the HLSL
reference compiler implementations (FXC & DXC). The document is not
intended to be exhaustive, but it should be a best effort to cover known
cases.

This document should document both the behavioral difference and the
explanation of why Clang differs.

The initail document covers known overload resolution differences.

---------

Co-authored-by: S. Bharadwaj Yadavalli <Bharadwaj.Yadavalli@microsoft.com>
2024-02-22 14:32:24 -06:00
Chris Bieneman
c2fd5b738e [NFC] Remove trailing whitespace
This seems to be causing problems that I couldn't reproduce locally.
2024-01-11 12:34:51 -06:00
Chris B
183eae0643
[HLSL][Docs] Add documentation for HLSL functions (#75397)
This adds a new document that covers the HLSL approach to function calls
and parameter semantics. At time of writing this document is a proposal
for the implementation.
2024-01-10 14:12:30 -06:00
Xiang Li
6a6f10fd23 [Docs] [HLSL] Add note about PCH support
PCH supported for HLSL is added when compile in -cc1 mode using -include-pch for test AST.
This change add some notes about the support of PCH for HLSL.

Reviewed By: beanz

Differential Revision: https://reviews.llvm.org/D134330
2022-10-07 10:49:21 -07:00
Chris Bieneman
d20f9f8d21 [Docs] [HLSL] Add IR reference for HLSL
HLSL uses a variety of named IR metadata and attributes to convey
additional information from the frontend to the backend. This document
tries to capture and document the named annotations to provide a
reference for future contributors.

Reviewed By: python3kgae

Differential Revision: https://reviews.llvm.org/D134304
2022-09-23 10:29:54 -05:00
Chris Bieneman
a8a49923dd [HLSL] Call global destructors from entries
HLSL doesn't have a C++ runtime that supports `atexit` registration. To
enable global destructors we instead rely on the `llvm.global_dtor`
mechanism.

This change disables `atexit` generation for HLSL and updates the HLSL
code generation to call global destructors on the exit from entry
functions.

Depends on D132977.

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D133518
2022-09-13 15:05:47 -05:00
Chris Bieneman
d3c54a172d [HLSL] Call global constructors inside entry
HLSL doesn't have a runtime loader model that supports global
construction by a loader or runtime initializer. To allow us to leverage
global constructors with minimal code generation impact we put calls to
the global constructors inside the generated entry function.

Differential Revision: https://reviews.llvm.org/D132977
2022-09-09 09:01:28 -05:00
Chris Bieneman
de8f372bfe [Docs] Fixing incorrect document title
Doh! This clearly slipped my review. Thanks DuckDuckGo for showing me
the error of my ways :).
2022-08-30 12:19:05 -05:00
Chris Bieneman
739a747b23 [Docs] [HLSL] Documenting HLSL Entry Functions
This document describes the basic usage and implementation details for
HLSL entry functions in Clang.

Reviewed By: python3kgae

Differential Revision: https://reviews.llvm.org/D132672
2022-08-30 12:18:44 -05:00
Chris Bieneman
fc470013d1 [Docs] Add HLSL ResourceType documentation
Along with the new documentation this also re-organizes the HLSL docs
to a subdirectory. The hope is to continue to expand this documentation
as the HLSL implementation advances.

Differential Revision: https://reviews.llvm.org/D130794
2022-08-08 09:06:38 -05:00