File: RayTracingAddressSpaceAliasAnalysis.h

package info (click to toggle)
intel-graphics-compiler 1.0.12504.6-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 83,912 kB
  • sloc: cpp: 910,147; lisp: 202,655; ansic: 15,197; python: 4,025; yacc: 2,241; lex: 1,570; pascal: 244; sh: 104; makefile: 25
file content (83 lines) | stat: -rw-r--r-- 2,704 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/*========================== begin_copyright_notice ============================

Copyright (C) 2021 Intel Corporation

SPDX-License-Identifier: MIT

============================= end_copyright_notice ===========================*/

#pragma once

#include "Compiler/CodeGenPublic.h"

#include "common/LLVMWarningsPush.hpp"
#include "llvm/Config/llvm-config.h"
#include <llvm/Pass.h>
#include <llvmWrapper/Analysis/AliasAnalysis.h>
#include <llvm/Analysis/BasicAliasAnalysis.h>
#include <llvm/Analysis/TargetLibraryInfo.h>
#include "common/LLVMWarningsPop.hpp"

namespace IGC {

class RayTracingAddressSpaceAAResult : public llvm::AAResultBase<RayTracingAddressSpaceAAResult>
{
    friend llvm::AAResultBase<RayTracingAddressSpaceAAResult>;
    const llvm::TargetLibraryInfo& TLI;
    const CodeGenContext& CGC;
public:
    explicit RayTracingAddressSpaceAAResult(
        const llvm::TargetLibraryInfo& TLI,
        const CodeGenContext& ctx)
        : llvm::AAResultBase<RayTracingAddressSpaceAAResult>(),
          TLI(TLI), CGC(ctx), allStateful(checkStateful(ctx)) {}
    RayTracingAddressSpaceAAResult(RayTracingAddressSpaceAAResult&& Arg)
        : llvm::AAResultBase<RayTracingAddressSpaceAAResult>(std::move(Arg)),
          TLI(Arg.TLI), CGC(Arg.CGC), allStateful(checkStateful(Arg.CGC)) {}

    IGCLLVM::AliasResultEnum alias(
        const llvm::MemoryLocation& LocA, const llvm::MemoryLocation& LocB
#if LLVM_VERSION_MAJOR >= 9
        , llvm::AAQueryInfo& AAQI
#endif
    );

    llvm::ModRefInfo getModRefInfo(
        const llvm::CallBase* Call, const llvm::MemoryLocation& Loc,
        llvm::AAQueryInfo& AAQI);

    llvm::ModRefInfo getModRefInfo(
        const llvm::CallBase* Call1, const llvm::CallBase* Call2,
        llvm::AAQueryInfo& AAQI);

    static bool isRTAS(unsigned AS, const CodeGenContext& Ctx);
private:
    bool allStateful = false;
private:
    bool noRTASAlias(unsigned AS1, unsigned AS2) const;
    bool isRTAS(unsigned AS) const;
    static bool checkStateful(const CodeGenContext& Ctx);
};

class RayTracingAddressSpaceAAWrapperPass : public llvm::ImmutablePass {
    std::unique_ptr<RayTracingAddressSpaceAAResult> Result;

public:
    static char ID;

    RayTracingAddressSpaceAAWrapperPass();

    void getAnalysisUsage(llvm::AnalysisUsage& AU) const override;

    bool doInitialization(llvm::Module& M) override;

    bool doFinalization(llvm::Module& M) override;

    RayTracingAddressSpaceAAResult& getResult();
    const RayTracingAddressSpaceAAResult& getResult() const;
};

llvm::ImmutablePass* createRayTracingAddressSpaceAAWrapperPass();
void addRayTracingAddressSpaceAAResult(llvm::Pass&, llvm::Function&, llvm::AAResults&);

} // End IGC namespace