• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2021 The Tint Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef SRC_TRANSFORM_SIMPLIFY_POINTERS_H_
16 #define SRC_TRANSFORM_SIMPLIFY_POINTERS_H_
17 
18 #include "src/transform/transform.h"
19 
20 namespace tint {
21 namespace transform {
22 
23 /// SimplifyPointers is a Transform that moves all usage of function-scope
24 /// `let` statements of a pointer type into their places of usage, while also
25 /// simplifying any chains of address-of or indirections operators.
26 ///
27 /// Parameters of a pointer type are not adjusted.
28 ///
29 /// Note: SimplifyPointers does not operate on module-scope `let`s, as these
30 /// cannot be pointers: https://gpuweb.github.io/gpuweb/wgsl/#module-constants
31 /// `A module-scope let-declared constant must be of constructible type.`
32 class SimplifyPointers : public Castable<SimplifyPointers, Transform> {
33  public:
34   /// Constructor
35   SimplifyPointers();
36 
37   /// Destructor
38   ~SimplifyPointers() override;
39 
40  protected:
41   struct State;
42 
43   /// Runs the transform using the CloneContext built for transforming a
44   /// program. Run() is responsible for calling Clone() on the CloneContext.
45   /// @param ctx the CloneContext primed with the input program and
46   /// ProgramBuilder
47   /// @param inputs optional extra transform-specific input data
48   /// @param outputs optional extra transform-specific output data
49   void Run(CloneContext& ctx, const DataMap& inputs, DataMap& outputs) override;
50 };
51 
52 }  // namespace transform
53 }  // namespace tint
54 
55 #endif  // SRC_TRANSFORM_SIMPLIFY_POINTERS_H_
56