149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===-- NVPTXISelLowering.h - NVPTX DAG Lowering Interface ------*- C++ -*-===//
249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//                     The LLVM Compiler Infrastructure
449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// This file is distributed under the University of Illinois Open Source
649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// License. See LICENSE.TXT for details.
749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===//
949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
1049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// This file defines the interfaces that NVPTX uses to lower LLVM code into a
1149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// selection DAG.
1249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
1349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===//
1449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_LIB_TARGET_NVPTX_NVPTXISELLOWERING_H
1637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_LIB_TARGET_NVPTX_NVPTXISELLOWERING_H
1749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
1849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTX.h"
1949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/CodeGen/SelectionDAG.h"
2049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/Target/TargetLowering.h"
2149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
2249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskinamespace llvm {
2349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskinamespace NVPTXISD {
2449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskienum NodeType {
2549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  // Start the numbering from where ISD NodeType finishes.
2649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  FIRST_NUMBER = ISD::BUILTIN_OP_END,
2749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  Wrapper,
2849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CALL,
2949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  RET_FLAG,
3049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  LOAD_PARAM,
3149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  DeclareParam,
3249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  DeclareScalarParam,
3349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  DeclareRetParam,
3449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  DeclareRet,
3549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  DeclareScalarRet,
3649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  PrintCall,
3749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  PrintCallUni,
3849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CallArgBegin,
3949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CallArg,
4049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  LastCallArg,
4149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CallArgEnd,
4249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CallVoid,
4349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CallVal,
4449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CallSymbol,
4549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  Prototype,
4649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  MoveParam,
4749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  PseudoUseParam,
4849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  RETURN,
4949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CallSeqBegin,
5049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  CallSeqEnd,
514d748eb0e4b55262619305c96a89c55c30bffe6cJustin Holewinski  CallPrototype,
52c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  FUN_SHFL_CLAMP,
53c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  FUN_SHFR_CLAMP,
54c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  MUL_WIDE_SIGNED,
55c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  MUL_WIDE_UNSIGNED,
56c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  IMAD,
577eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  Dummy,
587eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski
597eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  LoadV2 = ISD::FIRST_TARGET_MEMORY_OPCODE,
607eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  LoadV4,
617eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  LDGV2, // LDG.v2
627eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  LDGV4, // LDG.v4
637eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  LDUV2, // LDU.v2
647eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  LDUV4, // LDU.v4
657eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  StoreV2,
661c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  StoreV4,
671c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  LoadParam,
681c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  LoadParamV2,
691c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  LoadParamV4,
701c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  StoreParam,
711c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  StoreParamV2,
721c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  StoreParamV4,
731c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  StoreParamS32, // to sext and store a <32bit value, not used currently
741c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  StoreParamU32, // to zext and store a <32bit value, not used currently
751c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  StoreRetval,
761c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  StoreRetvalV2,
77dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  StoreRetvalV4,
78dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
79dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  // Texture intrinsics
8037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DFloatS32,
81dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex1DFloatFloat,
82dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex1DFloatFloatLevel,
83dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex1DFloatFloatGrad,
8437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DS32S32,
8537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DS32Float,
8637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DS32FloatLevel,
8737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DS32FloatGrad,
8837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DU32S32,
8937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DU32Float,
9037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DU32FloatLevel,
9137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DU32FloatGrad,
9237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayFloatS32,
93dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex1DArrayFloatFloat,
94dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex1DArrayFloatFloatLevel,
95dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex1DArrayFloatFloatGrad,
9637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayS32S32,
9737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayS32Float,
9837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayS32FloatLevel,
9937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayS32FloatGrad,
10037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayU32S32,
10137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayU32Float,
10237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayU32FloatLevel,
10337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex1DArrayU32FloatGrad,
10437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DFloatS32,
105dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex2DFloatFloat,
106dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex2DFloatFloatLevel,
107dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex2DFloatFloatGrad,
10837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DS32S32,
10937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DS32Float,
11037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DS32FloatLevel,
11137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DS32FloatGrad,
11237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DU32S32,
11337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DU32Float,
11437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DU32FloatLevel,
11537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DU32FloatGrad,
11637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayFloatS32,
117dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex2DArrayFloatFloat,
118dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex2DArrayFloatFloatLevel,
119dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex2DArrayFloatFloatGrad,
12037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayS32S32,
12137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayS32Float,
12237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayS32FloatLevel,
12337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayS32FloatGrad,
12437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayU32S32,
12537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayU32Float,
12637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayU32FloatLevel,
12737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex2DArrayU32FloatGrad,
12837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DFloatS32,
129dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex3DFloatFloat,
130dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex3DFloatFloatLevel,
131dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Tex3DFloatFloatGrad,
13237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DS32S32,
13337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DS32Float,
13437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DS32FloatLevel,
13537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DS32FloatGrad,
13637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DU32S32,
13737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DU32Float,
13837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DU32FloatLevel,
13937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tex3DU32FloatGrad,
14037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeFloatFloat,
14137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeFloatFloatLevel,
14237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeS32Float,
14337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeS32FloatLevel,
14437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeU32Float,
14537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeU32FloatLevel,
14637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeArrayFloatFloat,
14737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeArrayFloatFloatLevel,
14837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeArrayS32Float,
14937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeArrayS32FloatLevel,
15037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeArrayU32Float,
15137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexCubeArrayU32FloatLevel,
15237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4R2DFloatFloat,
15337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4G2DFloatFloat,
15437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4B2DFloatFloat,
15537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4A2DFloatFloat,
15637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4R2DS64Float,
15737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4G2DS64Float,
15837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4B2DS64Float,
15937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4A2DS64Float,
16037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4R2DU64Float,
16137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4G2DU64Float,
16237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4B2DU64Float,
16337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4A2DU64Float,
16437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DFloatS32,
16537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DFloatFloat,
16637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DFloatFloatLevel,
16737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DFloatFloatGrad,
16837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DS32S32,
16937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DS32Float,
17037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DS32FloatLevel,
17137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DS32FloatGrad,
17237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DU32S32,
17337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DU32Float,
17437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DU32FloatLevel,
17537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DU32FloatGrad,
17637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayFloatS32,
17737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayFloatFloat,
17837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayFloatFloatLevel,
17937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayFloatFloatGrad,
18037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayS32S32,
18137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayS32Float,
18237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayS32FloatLevel,
18337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayS32FloatGrad,
18437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayU32S32,
18537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayU32Float,
18637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayU32FloatLevel,
18737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified1DArrayU32FloatGrad,
18837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DFloatS32,
18937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DFloatFloat,
19037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DFloatFloatLevel,
19137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DFloatFloatGrad,
19237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DS32S32,
19337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DS32Float,
19437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DS32FloatLevel,
19537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DS32FloatGrad,
19637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DU32S32,
19737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DU32Float,
19837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DU32FloatLevel,
19937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DU32FloatGrad,
20037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayFloatS32,
20137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayFloatFloat,
20237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayFloatFloatLevel,
20337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayFloatFloatGrad,
20437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayS32S32,
20537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayS32Float,
20637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayS32FloatLevel,
20737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayS32FloatGrad,
20837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayU32S32,
20937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayU32Float,
21037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayU32FloatLevel,
21137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified2DArrayU32FloatGrad,
21237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DFloatS32,
21337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DFloatFloat,
21437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DFloatFloatLevel,
21537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DFloatFloatGrad,
21637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DS32S32,
21737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DS32Float,
21837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DS32FloatLevel,
21937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DS32FloatGrad,
22037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DU32S32,
22137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DU32Float,
22237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DU32FloatLevel,
22337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnified3DU32FloatGrad,
22437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeFloatFloat,
22537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeFloatFloatLevel,
22637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeS32Float,
22737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeS32FloatLevel,
22837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeU32Float,
22937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeU32FloatLevel,
23037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeArrayFloatFloat,
23137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeArrayFloatFloatLevel,
23237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeArrayS32Float,
23337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeArrayS32FloatLevel,
23437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeArrayU32Float,
23537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  TexUnifiedCubeArrayU32FloatLevel,
23637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedR2DFloatFloat,
23737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedG2DFloatFloat,
23837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedB2DFloatFloat,
23937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedA2DFloatFloat,
24037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedR2DS64Float,
24137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedG2DS64Float,
24237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedB2DS64Float,
24337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedA2DS64Float,
24437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedR2DU64Float,
24537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedG2DU64Float,
24637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedB2DU64Float,
24737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Tld4UnifiedA2DU64Float,
248dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
249dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  // Surface intrinsics
25037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI8Clamp,
25137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI16Clamp,
25237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI32Clamp,
25337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI64Clamp,
25437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I8Clamp,
25537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I16Clamp,
25637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I32Clamp,
25737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I64Clamp,
25837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV4I8Clamp,
25937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV4I16Clamp,
26037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV4I32Clamp,
26137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
26237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI8Clamp,
26337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI16Clamp,
26437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI32Clamp,
26537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI64Clamp,
26637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I8Clamp,
26737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I16Clamp,
26837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I32Clamp,
26937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I64Clamp,
27037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV4I8Clamp,
27137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV4I16Clamp,
27237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV4I32Clamp,
27337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
27437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI8Clamp,
27537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI16Clamp,
27637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI32Clamp,
27737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI64Clamp,
27837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I8Clamp,
27937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I16Clamp,
28037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I32Clamp,
28137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I64Clamp,
28237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV4I8Clamp,
28337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV4I16Clamp,
28437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV4I32Clamp,
28537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
28637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI8Clamp,
28737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI16Clamp,
28837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI32Clamp,
28937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI64Clamp,
29037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I8Clamp,
29137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I16Clamp,
29237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I32Clamp,
29337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I64Clamp,
29437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV4I8Clamp,
29537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV4I16Clamp,
29637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV4I32Clamp,
29737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
29837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI8Clamp,
29937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI16Clamp,
30037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI32Clamp,
30137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI64Clamp,
30237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I8Clamp,
30337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I16Clamp,
30437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I32Clamp,
30537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I64Clamp,
30637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV4I8Clamp,
30737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV4I16Clamp,
30837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV4I32Clamp,
30937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
310dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DI8Trap,
311dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DI16Trap,
312dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DI32Trap,
31337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI64Trap,
314dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DV2I8Trap,
315dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DV2I16Trap,
316dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DV2I32Trap,
31737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I64Trap,
318dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DV4I8Trap,
319dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DV4I16Trap,
320dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DV4I32Trap,
321dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
322dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayI8Trap,
323dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayI16Trap,
324dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayI32Trap,
32537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI64Trap,
326dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayV2I8Trap,
327dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayV2I16Trap,
328dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayV2I32Trap,
32937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I64Trap,
330dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayV4I8Trap,
331dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayV4I16Trap,
332dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld1DArrayV4I32Trap,
333dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
334dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DI8Trap,
335dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DI16Trap,
336dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DI32Trap,
33737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI64Trap,
338dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DV2I8Trap,
339dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DV2I16Trap,
340dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DV2I32Trap,
34137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I64Trap,
342dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DV4I8Trap,
343dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DV4I16Trap,
344dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DV4I32Trap,
345dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
346dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayI8Trap,
347dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayI16Trap,
348dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayI32Trap,
34937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI64Trap,
350dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayV2I8Trap,
351dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayV2I16Trap,
352dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayV2I32Trap,
35337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I64Trap,
354dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayV4I8Trap,
355dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayV4I16Trap,
356dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld2DArrayV4I32Trap,
357dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
358dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld3DI8Trap,
359dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld3DI16Trap,
360dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld3DI32Trap,
36137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI64Trap,
362dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld3DV2I8Trap,
363dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld3DV2I16Trap,
364dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld3DV2I32Trap,
36537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I64Trap,
366dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld3DV4I8Trap,
367dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Suld3DV4I16Trap,
36837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV4I32Trap,
36937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
37037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI8Zero,
37137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI16Zero,
37237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI32Zero,
37337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DI64Zero,
37437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I8Zero,
37537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I16Zero,
37637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I32Zero,
37737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV2I64Zero,
37837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV4I8Zero,
37937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV4I16Zero,
38037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DV4I32Zero,
38137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
38237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI8Zero,
38337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI16Zero,
38437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI32Zero,
38537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayI64Zero,
38637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I8Zero,
38737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I16Zero,
38837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I32Zero,
38937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV2I64Zero,
39037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV4I8Zero,
39137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV4I16Zero,
39237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld1DArrayV4I32Zero,
39337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
39437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI8Zero,
39537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI16Zero,
39637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI32Zero,
39737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DI64Zero,
39837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I8Zero,
39937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I16Zero,
40037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I32Zero,
40137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV2I64Zero,
40237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV4I8Zero,
40337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV4I16Zero,
40437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DV4I32Zero,
40537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
40637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI8Zero,
40737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI16Zero,
40837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI32Zero,
40937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayI64Zero,
41037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I8Zero,
41137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I16Zero,
41237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I32Zero,
41337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV2I64Zero,
41437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV4I8Zero,
41537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV4I16Zero,
41637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld2DArrayV4I32Zero,
41737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
41837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI8Zero,
41937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI16Zero,
42037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI32Zero,
42137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DI64Zero,
42237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I8Zero,
42337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I16Zero,
42437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I32Zero,
42537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV2I64Zero,
42637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV4I8Zero,
42737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV4I16Zero,
42837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  Suld3DV4I32Zero
42949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski};
43049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski}
43149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
432c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hinesclass NVPTXSubtarget;
433c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines
43449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===--------------------------------------------------------------------===//
43549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// TargetLowering Implementation
43649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===--------------------------------------------------------------------===//
43749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiclass NVPTXTargetLowering : public TargetLowering {
43849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskipublic:
439ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  explicit NVPTXTargetLowering(const NVPTXTargetMachine &TM,
440ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                               const NVPTXSubtarget &STI);
441dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
44249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
44349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
44449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  SDValue LowerGlobalAddress(const GlobalValue *GV, int64_t Offset,
44549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                             SelectionDAG &DAG) const;
44649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
447dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  const char *getTargetNodeName(unsigned Opcode) const override;
44849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
44949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  bool isTypeSupportedInIntrinsic(MVT VT) const;
45049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
4513639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski  bool getTgtMemIntrinsic(IntrinsicInfo &Info, const CallInst &I,
452dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                          unsigned Intrinsic) const override;
45349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
45449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  /// isLegalAddressingMode - Return true if the addressing mode represented
45549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  /// by AM is legal for this target, for a load/store of the specified type
45649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  /// Used to guide target specific optimizations, like loop strength
45749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  /// reduction (LoopStrengthReduce.cpp) and memory optimization for
45849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  /// address mode (CodeGenPrepare.cpp)
459dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool isLegalAddressingMode(const AddrMode &AM, Type *Ty) const override;
46049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
46149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  /// getFunctionAlignment - Return the Log2 alignment of this function.
462dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  unsigned getFunctionAlignment(const Function *F) const;
46349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
464c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  EVT getSetCCResultType(LLVMContext &Ctx, EVT VT) const override {
4653d200255d5b93344c1ab0a5ba4b47a52cfa5893eJustin Holewinski    if (VT.isVector())
466c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines      return EVT::getVectorVT(Ctx, MVT::i1, VT.getVectorNumElements());
46749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski    return MVT::i1;
46849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  }
46949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
470dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  ConstraintType
471dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  getConstraintType(const std::string &Constraint) const override;
4723639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski  std::pair<unsigned, const TargetRegisterClass *>
473ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
474ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                               const std::string &Constraint,
475dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                               MVT VT) const override;
47649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
477dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  SDValue LowerFormalArguments(
4783639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski      SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
479ac6d9bec671252dd1e596fa71180ff6b39d06b5dAndrew Trick      const SmallVectorImpl<ISD::InputArg> &Ins, SDLoc dl, SelectionDAG &DAG,
480dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      SmallVectorImpl<SDValue> &InVals) const override;
48149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
482dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  SDValue LowerCall(CallLoweringInfo &CLI,
483dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                    SmallVectorImpl<SDValue> &InVals) const override;
48449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
48549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  std::string getPrototype(Type *, const ArgListTy &,
48649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                           const SmallVectorImpl<ISD::OutputArg> &,
4871c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski                           unsigned retAlignment,
4881c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski                           const ImmutableCallSite *CS) const;
48949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
490dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  SDValue
49149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
49249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski              const SmallVectorImpl<ISD::OutputArg> &Outs,
493ac6d9bec671252dd1e596fa71180ff6b39d06b5dAndrew Trick              const SmallVectorImpl<SDValue> &OutVals, SDLoc dl,
494dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines              SelectionDAG &DAG) const override;
49549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
496dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void LowerAsmOperandForConstraint(SDValue Op, std::string &Constraint,
497dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                    std::vector<SDValue> &Ops,
498dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                    SelectionDAG &DAG) const override;
49949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
5004c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar  unsigned getInlineAsmMemConstraint(
5014c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar      const std::string &ConstraintCode) const override {
5024c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar    // FIXME: Map different constraints differently.
5034c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar    return InlineAsm::Constraint_m;
5044c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar  }
5054c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar
50637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  const NVPTXTargetMachine *nvTM;
50749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
50849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  // PTX always uses 32-bit shift amounts
509dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  MVT getScalarShiftAmountTy(EVT LHSTy) const override { return MVT::i32; }
51049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
511c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  TargetLoweringBase::LegalizeTypeAction
512c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  getPreferredVectorAction(EVT VT) const override;
5133d200255d5b93344c1ab0a5ba4b47a52cfa5893eJustin Holewinski
51437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  bool allowFMA(MachineFunction &MF, CodeGenOpt::Level OptLevel) const;
51537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
51637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  bool isFMAFasterThanFMulAndFAdd(EVT) const override { return true; }
51737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
518ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  bool enableAggressiveFMAFusion(EVT VT) const override { return true; }
519ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
52049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiprivate:
521ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  const NVPTXSubtarget &STI; // cache the subtarget here
52249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
5233639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski  SDValue getExtSymb(SelectionDAG &DAG, const char *name, int idx,
5243639ce2575660a0e6938d2e84e8bd9a738fd7051Justin Holewinski                     EVT = MVT::i32) const;
5255df8c1bbb66a6b7386c9d7866592ecbb646da66cJustin Holewinski  SDValue getParamSymbol(SelectionDAG &DAG, int idx, EVT) const;
52649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  SDValue getParamHelpSymbol(SelectionDAG &DAG, int idx);
52749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
52849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  SDValue LowerCONCAT_VECTORS(SDValue Op, SelectionDAG &DAG) const;
529a20067b5d4ea718a3f0e47adae8b231e4a2db9f6Justin Holewinski
530a20067b5d4ea718a3f0e47adae8b231e4a2db9f6Justin Holewinski  SDValue LowerLOAD(SDValue Op, SelectionDAG &DAG) const;
5317eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  SDValue LowerLOADi1(SDValue Op, SelectionDAG &DAG) const;
5327eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski
5337eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG) const;
5347eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  SDValue LowerSTOREi1(SDValue Op, SelectionDAG &DAG) const;
5357eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski  SDValue LowerSTOREVector(SDValue Op, SelectionDAG &DAG) const;
5367eacad03efda36e09ebd96e95d7891cadaaa9087Justin Holewinski
537c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  SDValue LowerShiftRightParts(SDValue Op, SelectionDAG &DAG) const;
538c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  SDValue LowerShiftLeftParts(SDValue Op, SelectionDAG &DAG) const;
539c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines
540ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  SDValue LowerSelect(SDValue Op, SelectionDAG &DAG) const;
541ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
542dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue> &Results,
543dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                          SelectionDAG &DAG) const override;
544c6a4f5e819217e1e12c458aed8e7b122e23a3a58Stephen Hines  SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override;
5451c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski
5461c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski  unsigned getArgumentAlignment(SDValue Callee, const ImmutableCallSite *CS,
5471c07dae9fcd04469779edf7b86fef37fecc9466cJustin Holewinski                                Type *Ty, unsigned Idx) const;
54849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski};
54949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski} // namespace llvm
55049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
55137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#endif
552