1*9880d681SAndroid Build Coastguard Worker //===-- NVPTXISelLowering.h - NVPTX DAG Lowering Interface ------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // This file defines the interfaces that NVPTX uses to lower LLVM code into a 11*9880d681SAndroid Build Coastguard Worker // selection DAG. 12*9880d681SAndroid Build Coastguard Worker // 13*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_NVPTX_NVPTXISELLOWERING_H 16*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_NVPTX_NVPTXISELLOWERING_H 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker #include "NVPTX.h" 19*9880d681SAndroid Build Coastguard Worker #include "llvm/CodeGen/SelectionDAG.h" 20*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetLowering.h" 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker namespace llvm { 23*9880d681SAndroid Build Coastguard Worker namespace NVPTXISD { 24*9880d681SAndroid Build Coastguard Worker enum NodeType : unsigned { 25*9880d681SAndroid Build Coastguard Worker // Start the numbering from where ISD NodeType finishes. 26*9880d681SAndroid Build Coastguard Worker FIRST_NUMBER = ISD::BUILTIN_OP_END, 27*9880d681SAndroid Build Coastguard Worker Wrapper, 28*9880d681SAndroid Build Coastguard Worker CALL, 29*9880d681SAndroid Build Coastguard Worker RET_FLAG, 30*9880d681SAndroid Build Coastguard Worker LOAD_PARAM, 31*9880d681SAndroid Build Coastguard Worker DeclareParam, 32*9880d681SAndroid Build Coastguard Worker DeclareScalarParam, 33*9880d681SAndroid Build Coastguard Worker DeclareRetParam, 34*9880d681SAndroid Build Coastguard Worker DeclareRet, 35*9880d681SAndroid Build Coastguard Worker DeclareScalarRet, 36*9880d681SAndroid Build Coastguard Worker PrintCall, 37*9880d681SAndroid Build Coastguard Worker PrintConvergentCall, 38*9880d681SAndroid Build Coastguard Worker PrintCallUni, 39*9880d681SAndroid Build Coastguard Worker PrintConvergentCallUni, 40*9880d681SAndroid Build Coastguard Worker CallArgBegin, 41*9880d681SAndroid Build Coastguard Worker CallArg, 42*9880d681SAndroid Build Coastguard Worker LastCallArg, 43*9880d681SAndroid Build Coastguard Worker CallArgEnd, 44*9880d681SAndroid Build Coastguard Worker CallVoid, 45*9880d681SAndroid Build Coastguard Worker CallVal, 46*9880d681SAndroid Build Coastguard Worker CallSymbol, 47*9880d681SAndroid Build Coastguard Worker Prototype, 48*9880d681SAndroid Build Coastguard Worker MoveParam, 49*9880d681SAndroid Build Coastguard Worker PseudoUseParam, 50*9880d681SAndroid Build Coastguard Worker RETURN, 51*9880d681SAndroid Build Coastguard Worker CallSeqBegin, 52*9880d681SAndroid Build Coastguard Worker CallSeqEnd, 53*9880d681SAndroid Build Coastguard Worker CallPrototype, 54*9880d681SAndroid Build Coastguard Worker FUN_SHFL_CLAMP, 55*9880d681SAndroid Build Coastguard Worker FUN_SHFR_CLAMP, 56*9880d681SAndroid Build Coastguard Worker MUL_WIDE_SIGNED, 57*9880d681SAndroid Build Coastguard Worker MUL_WIDE_UNSIGNED, 58*9880d681SAndroid Build Coastguard Worker IMAD, 59*9880d681SAndroid Build Coastguard Worker Dummy, 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker LoadV2 = ISD::FIRST_TARGET_MEMORY_OPCODE, 62*9880d681SAndroid Build Coastguard Worker LoadV4, 63*9880d681SAndroid Build Coastguard Worker LDGV2, // LDG.v2 64*9880d681SAndroid Build Coastguard Worker LDGV4, // LDG.v4 65*9880d681SAndroid Build Coastguard Worker LDUV2, // LDU.v2 66*9880d681SAndroid Build Coastguard Worker LDUV4, // LDU.v4 67*9880d681SAndroid Build Coastguard Worker StoreV2, 68*9880d681SAndroid Build Coastguard Worker StoreV4, 69*9880d681SAndroid Build Coastguard Worker LoadParam, 70*9880d681SAndroid Build Coastguard Worker LoadParamV2, 71*9880d681SAndroid Build Coastguard Worker LoadParamV4, 72*9880d681SAndroid Build Coastguard Worker StoreParam, 73*9880d681SAndroid Build Coastguard Worker StoreParamV2, 74*9880d681SAndroid Build Coastguard Worker StoreParamV4, 75*9880d681SAndroid Build Coastguard Worker StoreParamS32, // to sext and store a <32bit value, not used currently 76*9880d681SAndroid Build Coastguard Worker StoreParamU32, // to zext and store a <32bit value, not used currently 77*9880d681SAndroid Build Coastguard Worker StoreRetval, 78*9880d681SAndroid Build Coastguard Worker StoreRetvalV2, 79*9880d681SAndroid Build Coastguard Worker StoreRetvalV4, 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Worker // Texture intrinsics 82*9880d681SAndroid Build Coastguard Worker Tex1DFloatS32, 83*9880d681SAndroid Build Coastguard Worker Tex1DFloatFloat, 84*9880d681SAndroid Build Coastguard Worker Tex1DFloatFloatLevel, 85*9880d681SAndroid Build Coastguard Worker Tex1DFloatFloatGrad, 86*9880d681SAndroid Build Coastguard Worker Tex1DS32S32, 87*9880d681SAndroid Build Coastguard Worker Tex1DS32Float, 88*9880d681SAndroid Build Coastguard Worker Tex1DS32FloatLevel, 89*9880d681SAndroid Build Coastguard Worker Tex1DS32FloatGrad, 90*9880d681SAndroid Build Coastguard Worker Tex1DU32S32, 91*9880d681SAndroid Build Coastguard Worker Tex1DU32Float, 92*9880d681SAndroid Build Coastguard Worker Tex1DU32FloatLevel, 93*9880d681SAndroid Build Coastguard Worker Tex1DU32FloatGrad, 94*9880d681SAndroid Build Coastguard Worker Tex1DArrayFloatS32, 95*9880d681SAndroid Build Coastguard Worker Tex1DArrayFloatFloat, 96*9880d681SAndroid Build Coastguard Worker Tex1DArrayFloatFloatLevel, 97*9880d681SAndroid Build Coastguard Worker Tex1DArrayFloatFloatGrad, 98*9880d681SAndroid Build Coastguard Worker Tex1DArrayS32S32, 99*9880d681SAndroid Build Coastguard Worker Tex1DArrayS32Float, 100*9880d681SAndroid Build Coastguard Worker Tex1DArrayS32FloatLevel, 101*9880d681SAndroid Build Coastguard Worker Tex1DArrayS32FloatGrad, 102*9880d681SAndroid Build Coastguard Worker Tex1DArrayU32S32, 103*9880d681SAndroid Build Coastguard Worker Tex1DArrayU32Float, 104*9880d681SAndroid Build Coastguard Worker Tex1DArrayU32FloatLevel, 105*9880d681SAndroid Build Coastguard Worker Tex1DArrayU32FloatGrad, 106*9880d681SAndroid Build Coastguard Worker Tex2DFloatS32, 107*9880d681SAndroid Build Coastguard Worker Tex2DFloatFloat, 108*9880d681SAndroid Build Coastguard Worker Tex2DFloatFloatLevel, 109*9880d681SAndroid Build Coastguard Worker Tex2DFloatFloatGrad, 110*9880d681SAndroid Build Coastguard Worker Tex2DS32S32, 111*9880d681SAndroid Build Coastguard Worker Tex2DS32Float, 112*9880d681SAndroid Build Coastguard Worker Tex2DS32FloatLevel, 113*9880d681SAndroid Build Coastguard Worker Tex2DS32FloatGrad, 114*9880d681SAndroid Build Coastguard Worker Tex2DU32S32, 115*9880d681SAndroid Build Coastguard Worker Tex2DU32Float, 116*9880d681SAndroid Build Coastguard Worker Tex2DU32FloatLevel, 117*9880d681SAndroid Build Coastguard Worker Tex2DU32FloatGrad, 118*9880d681SAndroid Build Coastguard Worker Tex2DArrayFloatS32, 119*9880d681SAndroid Build Coastguard Worker Tex2DArrayFloatFloat, 120*9880d681SAndroid Build Coastguard Worker Tex2DArrayFloatFloatLevel, 121*9880d681SAndroid Build Coastguard Worker Tex2DArrayFloatFloatGrad, 122*9880d681SAndroid Build Coastguard Worker Tex2DArrayS32S32, 123*9880d681SAndroid Build Coastguard Worker Tex2DArrayS32Float, 124*9880d681SAndroid Build Coastguard Worker Tex2DArrayS32FloatLevel, 125*9880d681SAndroid Build Coastguard Worker Tex2DArrayS32FloatGrad, 126*9880d681SAndroid Build Coastguard Worker Tex2DArrayU32S32, 127*9880d681SAndroid Build Coastguard Worker Tex2DArrayU32Float, 128*9880d681SAndroid Build Coastguard Worker Tex2DArrayU32FloatLevel, 129*9880d681SAndroid Build Coastguard Worker Tex2DArrayU32FloatGrad, 130*9880d681SAndroid Build Coastguard Worker Tex3DFloatS32, 131*9880d681SAndroid Build Coastguard Worker Tex3DFloatFloat, 132*9880d681SAndroid Build Coastguard Worker Tex3DFloatFloatLevel, 133*9880d681SAndroid Build Coastguard Worker Tex3DFloatFloatGrad, 134*9880d681SAndroid Build Coastguard Worker Tex3DS32S32, 135*9880d681SAndroid Build Coastguard Worker Tex3DS32Float, 136*9880d681SAndroid Build Coastguard Worker Tex3DS32FloatLevel, 137*9880d681SAndroid Build Coastguard Worker Tex3DS32FloatGrad, 138*9880d681SAndroid Build Coastguard Worker Tex3DU32S32, 139*9880d681SAndroid Build Coastguard Worker Tex3DU32Float, 140*9880d681SAndroid Build Coastguard Worker Tex3DU32FloatLevel, 141*9880d681SAndroid Build Coastguard Worker Tex3DU32FloatGrad, 142*9880d681SAndroid Build Coastguard Worker TexCubeFloatFloat, 143*9880d681SAndroid Build Coastguard Worker TexCubeFloatFloatLevel, 144*9880d681SAndroid Build Coastguard Worker TexCubeS32Float, 145*9880d681SAndroid Build Coastguard Worker TexCubeS32FloatLevel, 146*9880d681SAndroid Build Coastguard Worker TexCubeU32Float, 147*9880d681SAndroid Build Coastguard Worker TexCubeU32FloatLevel, 148*9880d681SAndroid Build Coastguard Worker TexCubeArrayFloatFloat, 149*9880d681SAndroid Build Coastguard Worker TexCubeArrayFloatFloatLevel, 150*9880d681SAndroid Build Coastguard Worker TexCubeArrayS32Float, 151*9880d681SAndroid Build Coastguard Worker TexCubeArrayS32FloatLevel, 152*9880d681SAndroid Build Coastguard Worker TexCubeArrayU32Float, 153*9880d681SAndroid Build Coastguard Worker TexCubeArrayU32FloatLevel, 154*9880d681SAndroid Build Coastguard Worker Tld4R2DFloatFloat, 155*9880d681SAndroid Build Coastguard Worker Tld4G2DFloatFloat, 156*9880d681SAndroid Build Coastguard Worker Tld4B2DFloatFloat, 157*9880d681SAndroid Build Coastguard Worker Tld4A2DFloatFloat, 158*9880d681SAndroid Build Coastguard Worker Tld4R2DS64Float, 159*9880d681SAndroid Build Coastguard Worker Tld4G2DS64Float, 160*9880d681SAndroid Build Coastguard Worker Tld4B2DS64Float, 161*9880d681SAndroid Build Coastguard Worker Tld4A2DS64Float, 162*9880d681SAndroid Build Coastguard Worker Tld4R2DU64Float, 163*9880d681SAndroid Build Coastguard Worker Tld4G2DU64Float, 164*9880d681SAndroid Build Coastguard Worker Tld4B2DU64Float, 165*9880d681SAndroid Build Coastguard Worker Tld4A2DU64Float, 166*9880d681SAndroid Build Coastguard Worker TexUnified1DFloatS32, 167*9880d681SAndroid Build Coastguard Worker TexUnified1DFloatFloat, 168*9880d681SAndroid Build Coastguard Worker TexUnified1DFloatFloatLevel, 169*9880d681SAndroid Build Coastguard Worker TexUnified1DFloatFloatGrad, 170*9880d681SAndroid Build Coastguard Worker TexUnified1DS32S32, 171*9880d681SAndroid Build Coastguard Worker TexUnified1DS32Float, 172*9880d681SAndroid Build Coastguard Worker TexUnified1DS32FloatLevel, 173*9880d681SAndroid Build Coastguard Worker TexUnified1DS32FloatGrad, 174*9880d681SAndroid Build Coastguard Worker TexUnified1DU32S32, 175*9880d681SAndroid Build Coastguard Worker TexUnified1DU32Float, 176*9880d681SAndroid Build Coastguard Worker TexUnified1DU32FloatLevel, 177*9880d681SAndroid Build Coastguard Worker TexUnified1DU32FloatGrad, 178*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayFloatS32, 179*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayFloatFloat, 180*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayFloatFloatLevel, 181*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayFloatFloatGrad, 182*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayS32S32, 183*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayS32Float, 184*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayS32FloatLevel, 185*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayS32FloatGrad, 186*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayU32S32, 187*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayU32Float, 188*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayU32FloatLevel, 189*9880d681SAndroid Build Coastguard Worker TexUnified1DArrayU32FloatGrad, 190*9880d681SAndroid Build Coastguard Worker TexUnified2DFloatS32, 191*9880d681SAndroid Build Coastguard Worker TexUnified2DFloatFloat, 192*9880d681SAndroid Build Coastguard Worker TexUnified2DFloatFloatLevel, 193*9880d681SAndroid Build Coastguard Worker TexUnified2DFloatFloatGrad, 194*9880d681SAndroid Build Coastguard Worker TexUnified2DS32S32, 195*9880d681SAndroid Build Coastguard Worker TexUnified2DS32Float, 196*9880d681SAndroid Build Coastguard Worker TexUnified2DS32FloatLevel, 197*9880d681SAndroid Build Coastguard Worker TexUnified2DS32FloatGrad, 198*9880d681SAndroid Build Coastguard Worker TexUnified2DU32S32, 199*9880d681SAndroid Build Coastguard Worker TexUnified2DU32Float, 200*9880d681SAndroid Build Coastguard Worker TexUnified2DU32FloatLevel, 201*9880d681SAndroid Build Coastguard Worker TexUnified2DU32FloatGrad, 202*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayFloatS32, 203*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayFloatFloat, 204*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayFloatFloatLevel, 205*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayFloatFloatGrad, 206*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayS32S32, 207*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayS32Float, 208*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayS32FloatLevel, 209*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayS32FloatGrad, 210*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayU32S32, 211*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayU32Float, 212*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayU32FloatLevel, 213*9880d681SAndroid Build Coastguard Worker TexUnified2DArrayU32FloatGrad, 214*9880d681SAndroid Build Coastguard Worker TexUnified3DFloatS32, 215*9880d681SAndroid Build Coastguard Worker TexUnified3DFloatFloat, 216*9880d681SAndroid Build Coastguard Worker TexUnified3DFloatFloatLevel, 217*9880d681SAndroid Build Coastguard Worker TexUnified3DFloatFloatGrad, 218*9880d681SAndroid Build Coastguard Worker TexUnified3DS32S32, 219*9880d681SAndroid Build Coastguard Worker TexUnified3DS32Float, 220*9880d681SAndroid Build Coastguard Worker TexUnified3DS32FloatLevel, 221*9880d681SAndroid Build Coastguard Worker TexUnified3DS32FloatGrad, 222*9880d681SAndroid Build Coastguard Worker TexUnified3DU32S32, 223*9880d681SAndroid Build Coastguard Worker TexUnified3DU32Float, 224*9880d681SAndroid Build Coastguard Worker TexUnified3DU32FloatLevel, 225*9880d681SAndroid Build Coastguard Worker TexUnified3DU32FloatGrad, 226*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeFloatFloat, 227*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeFloatFloatLevel, 228*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeS32Float, 229*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeS32FloatLevel, 230*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeU32Float, 231*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeU32FloatLevel, 232*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeArrayFloatFloat, 233*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeArrayFloatFloatLevel, 234*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeArrayS32Float, 235*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeArrayS32FloatLevel, 236*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeArrayU32Float, 237*9880d681SAndroid Build Coastguard Worker TexUnifiedCubeArrayU32FloatLevel, 238*9880d681SAndroid Build Coastguard Worker Tld4UnifiedR2DFloatFloat, 239*9880d681SAndroid Build Coastguard Worker Tld4UnifiedG2DFloatFloat, 240*9880d681SAndroid Build Coastguard Worker Tld4UnifiedB2DFloatFloat, 241*9880d681SAndroid Build Coastguard Worker Tld4UnifiedA2DFloatFloat, 242*9880d681SAndroid Build Coastguard Worker Tld4UnifiedR2DS64Float, 243*9880d681SAndroid Build Coastguard Worker Tld4UnifiedG2DS64Float, 244*9880d681SAndroid Build Coastguard Worker Tld4UnifiedB2DS64Float, 245*9880d681SAndroid Build Coastguard Worker Tld4UnifiedA2DS64Float, 246*9880d681SAndroid Build Coastguard Worker Tld4UnifiedR2DU64Float, 247*9880d681SAndroid Build Coastguard Worker Tld4UnifiedG2DU64Float, 248*9880d681SAndroid Build Coastguard Worker Tld4UnifiedB2DU64Float, 249*9880d681SAndroid Build Coastguard Worker Tld4UnifiedA2DU64Float, 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Worker // Surface intrinsics 252*9880d681SAndroid Build Coastguard Worker Suld1DI8Clamp, 253*9880d681SAndroid Build Coastguard Worker Suld1DI16Clamp, 254*9880d681SAndroid Build Coastguard Worker Suld1DI32Clamp, 255*9880d681SAndroid Build Coastguard Worker Suld1DI64Clamp, 256*9880d681SAndroid Build Coastguard Worker Suld1DV2I8Clamp, 257*9880d681SAndroid Build Coastguard Worker Suld1DV2I16Clamp, 258*9880d681SAndroid Build Coastguard Worker Suld1DV2I32Clamp, 259*9880d681SAndroid Build Coastguard Worker Suld1DV2I64Clamp, 260*9880d681SAndroid Build Coastguard Worker Suld1DV4I8Clamp, 261*9880d681SAndroid Build Coastguard Worker Suld1DV4I16Clamp, 262*9880d681SAndroid Build Coastguard Worker Suld1DV4I32Clamp, 263*9880d681SAndroid Build Coastguard Worker 264*9880d681SAndroid Build Coastguard Worker Suld1DArrayI8Clamp, 265*9880d681SAndroid Build Coastguard Worker Suld1DArrayI16Clamp, 266*9880d681SAndroid Build Coastguard Worker Suld1DArrayI32Clamp, 267*9880d681SAndroid Build Coastguard Worker Suld1DArrayI64Clamp, 268*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I8Clamp, 269*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I16Clamp, 270*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I32Clamp, 271*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I64Clamp, 272*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I8Clamp, 273*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I16Clamp, 274*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I32Clamp, 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Worker Suld2DI8Clamp, 277*9880d681SAndroid Build Coastguard Worker Suld2DI16Clamp, 278*9880d681SAndroid Build Coastguard Worker Suld2DI32Clamp, 279*9880d681SAndroid Build Coastguard Worker Suld2DI64Clamp, 280*9880d681SAndroid Build Coastguard Worker Suld2DV2I8Clamp, 281*9880d681SAndroid Build Coastguard Worker Suld2DV2I16Clamp, 282*9880d681SAndroid Build Coastguard Worker Suld2DV2I32Clamp, 283*9880d681SAndroid Build Coastguard Worker Suld2DV2I64Clamp, 284*9880d681SAndroid Build Coastguard Worker Suld2DV4I8Clamp, 285*9880d681SAndroid Build Coastguard Worker Suld2DV4I16Clamp, 286*9880d681SAndroid Build Coastguard Worker Suld2DV4I32Clamp, 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Worker Suld2DArrayI8Clamp, 289*9880d681SAndroid Build Coastguard Worker Suld2DArrayI16Clamp, 290*9880d681SAndroid Build Coastguard Worker Suld2DArrayI32Clamp, 291*9880d681SAndroid Build Coastguard Worker Suld2DArrayI64Clamp, 292*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I8Clamp, 293*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I16Clamp, 294*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I32Clamp, 295*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I64Clamp, 296*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I8Clamp, 297*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I16Clamp, 298*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I32Clamp, 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Worker Suld3DI8Clamp, 301*9880d681SAndroid Build Coastguard Worker Suld3DI16Clamp, 302*9880d681SAndroid Build Coastguard Worker Suld3DI32Clamp, 303*9880d681SAndroid Build Coastguard Worker Suld3DI64Clamp, 304*9880d681SAndroid Build Coastguard Worker Suld3DV2I8Clamp, 305*9880d681SAndroid Build Coastguard Worker Suld3DV2I16Clamp, 306*9880d681SAndroid Build Coastguard Worker Suld3DV2I32Clamp, 307*9880d681SAndroid Build Coastguard Worker Suld3DV2I64Clamp, 308*9880d681SAndroid Build Coastguard Worker Suld3DV4I8Clamp, 309*9880d681SAndroid Build Coastguard Worker Suld3DV4I16Clamp, 310*9880d681SAndroid Build Coastguard Worker Suld3DV4I32Clamp, 311*9880d681SAndroid Build Coastguard Worker 312*9880d681SAndroid Build Coastguard Worker Suld1DI8Trap, 313*9880d681SAndroid Build Coastguard Worker Suld1DI16Trap, 314*9880d681SAndroid Build Coastguard Worker Suld1DI32Trap, 315*9880d681SAndroid Build Coastguard Worker Suld1DI64Trap, 316*9880d681SAndroid Build Coastguard Worker Suld1DV2I8Trap, 317*9880d681SAndroid Build Coastguard Worker Suld1DV2I16Trap, 318*9880d681SAndroid Build Coastguard Worker Suld1DV2I32Trap, 319*9880d681SAndroid Build Coastguard Worker Suld1DV2I64Trap, 320*9880d681SAndroid Build Coastguard Worker Suld1DV4I8Trap, 321*9880d681SAndroid Build Coastguard Worker Suld1DV4I16Trap, 322*9880d681SAndroid Build Coastguard Worker Suld1DV4I32Trap, 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Worker Suld1DArrayI8Trap, 325*9880d681SAndroid Build Coastguard Worker Suld1DArrayI16Trap, 326*9880d681SAndroid Build Coastguard Worker Suld1DArrayI32Trap, 327*9880d681SAndroid Build Coastguard Worker Suld1DArrayI64Trap, 328*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I8Trap, 329*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I16Trap, 330*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I32Trap, 331*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I64Trap, 332*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I8Trap, 333*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I16Trap, 334*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I32Trap, 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker Suld2DI8Trap, 337*9880d681SAndroid Build Coastguard Worker Suld2DI16Trap, 338*9880d681SAndroid Build Coastguard Worker Suld2DI32Trap, 339*9880d681SAndroid Build Coastguard Worker Suld2DI64Trap, 340*9880d681SAndroid Build Coastguard Worker Suld2DV2I8Trap, 341*9880d681SAndroid Build Coastguard Worker Suld2DV2I16Trap, 342*9880d681SAndroid Build Coastguard Worker Suld2DV2I32Trap, 343*9880d681SAndroid Build Coastguard Worker Suld2DV2I64Trap, 344*9880d681SAndroid Build Coastguard Worker Suld2DV4I8Trap, 345*9880d681SAndroid Build Coastguard Worker Suld2DV4I16Trap, 346*9880d681SAndroid Build Coastguard Worker Suld2DV4I32Trap, 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Worker Suld2DArrayI8Trap, 349*9880d681SAndroid Build Coastguard Worker Suld2DArrayI16Trap, 350*9880d681SAndroid Build Coastguard Worker Suld2DArrayI32Trap, 351*9880d681SAndroid Build Coastguard Worker Suld2DArrayI64Trap, 352*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I8Trap, 353*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I16Trap, 354*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I32Trap, 355*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I64Trap, 356*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I8Trap, 357*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I16Trap, 358*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I32Trap, 359*9880d681SAndroid Build Coastguard Worker 360*9880d681SAndroid Build Coastguard Worker Suld3DI8Trap, 361*9880d681SAndroid Build Coastguard Worker Suld3DI16Trap, 362*9880d681SAndroid Build Coastguard Worker Suld3DI32Trap, 363*9880d681SAndroid Build Coastguard Worker Suld3DI64Trap, 364*9880d681SAndroid Build Coastguard Worker Suld3DV2I8Trap, 365*9880d681SAndroid Build Coastguard Worker Suld3DV2I16Trap, 366*9880d681SAndroid Build Coastguard Worker Suld3DV2I32Trap, 367*9880d681SAndroid Build Coastguard Worker Suld3DV2I64Trap, 368*9880d681SAndroid Build Coastguard Worker Suld3DV4I8Trap, 369*9880d681SAndroid Build Coastguard Worker Suld3DV4I16Trap, 370*9880d681SAndroid Build Coastguard Worker Suld3DV4I32Trap, 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Worker Suld1DI8Zero, 373*9880d681SAndroid Build Coastguard Worker Suld1DI16Zero, 374*9880d681SAndroid Build Coastguard Worker Suld1DI32Zero, 375*9880d681SAndroid Build Coastguard Worker Suld1DI64Zero, 376*9880d681SAndroid Build Coastguard Worker Suld1DV2I8Zero, 377*9880d681SAndroid Build Coastguard Worker Suld1DV2I16Zero, 378*9880d681SAndroid Build Coastguard Worker Suld1DV2I32Zero, 379*9880d681SAndroid Build Coastguard Worker Suld1DV2I64Zero, 380*9880d681SAndroid Build Coastguard Worker Suld1DV4I8Zero, 381*9880d681SAndroid Build Coastguard Worker Suld1DV4I16Zero, 382*9880d681SAndroid Build Coastguard Worker Suld1DV4I32Zero, 383*9880d681SAndroid Build Coastguard Worker 384*9880d681SAndroid Build Coastguard Worker Suld1DArrayI8Zero, 385*9880d681SAndroid Build Coastguard Worker Suld1DArrayI16Zero, 386*9880d681SAndroid Build Coastguard Worker Suld1DArrayI32Zero, 387*9880d681SAndroid Build Coastguard Worker Suld1DArrayI64Zero, 388*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I8Zero, 389*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I16Zero, 390*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I32Zero, 391*9880d681SAndroid Build Coastguard Worker Suld1DArrayV2I64Zero, 392*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I8Zero, 393*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I16Zero, 394*9880d681SAndroid Build Coastguard Worker Suld1DArrayV4I32Zero, 395*9880d681SAndroid Build Coastguard Worker 396*9880d681SAndroid Build Coastguard Worker Suld2DI8Zero, 397*9880d681SAndroid Build Coastguard Worker Suld2DI16Zero, 398*9880d681SAndroid Build Coastguard Worker Suld2DI32Zero, 399*9880d681SAndroid Build Coastguard Worker Suld2DI64Zero, 400*9880d681SAndroid Build Coastguard Worker Suld2DV2I8Zero, 401*9880d681SAndroid Build Coastguard Worker Suld2DV2I16Zero, 402*9880d681SAndroid Build Coastguard Worker Suld2DV2I32Zero, 403*9880d681SAndroid Build Coastguard Worker Suld2DV2I64Zero, 404*9880d681SAndroid Build Coastguard Worker Suld2DV4I8Zero, 405*9880d681SAndroid Build Coastguard Worker Suld2DV4I16Zero, 406*9880d681SAndroid Build Coastguard Worker Suld2DV4I32Zero, 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Worker Suld2DArrayI8Zero, 409*9880d681SAndroid Build Coastguard Worker Suld2DArrayI16Zero, 410*9880d681SAndroid Build Coastguard Worker Suld2DArrayI32Zero, 411*9880d681SAndroid Build Coastguard Worker Suld2DArrayI64Zero, 412*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I8Zero, 413*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I16Zero, 414*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I32Zero, 415*9880d681SAndroid Build Coastguard Worker Suld2DArrayV2I64Zero, 416*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I8Zero, 417*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I16Zero, 418*9880d681SAndroid Build Coastguard Worker Suld2DArrayV4I32Zero, 419*9880d681SAndroid Build Coastguard Worker 420*9880d681SAndroid Build Coastguard Worker Suld3DI8Zero, 421*9880d681SAndroid Build Coastguard Worker Suld3DI16Zero, 422*9880d681SAndroid Build Coastguard Worker Suld3DI32Zero, 423*9880d681SAndroid Build Coastguard Worker Suld3DI64Zero, 424*9880d681SAndroid Build Coastguard Worker Suld3DV2I8Zero, 425*9880d681SAndroid Build Coastguard Worker Suld3DV2I16Zero, 426*9880d681SAndroid Build Coastguard Worker Suld3DV2I32Zero, 427*9880d681SAndroid Build Coastguard Worker Suld3DV2I64Zero, 428*9880d681SAndroid Build Coastguard Worker Suld3DV4I8Zero, 429*9880d681SAndroid Build Coastguard Worker Suld3DV4I16Zero, 430*9880d681SAndroid Build Coastguard Worker Suld3DV4I32Zero 431*9880d681SAndroid Build Coastguard Worker }; 432*9880d681SAndroid Build Coastguard Worker } 433*9880d681SAndroid Build Coastguard Worker 434*9880d681SAndroid Build Coastguard Worker class NVPTXSubtarget; 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Worker //===--------------------------------------------------------------------===// 437*9880d681SAndroid Build Coastguard Worker // TargetLowering Implementation 438*9880d681SAndroid Build Coastguard Worker //===--------------------------------------------------------------------===// 439*9880d681SAndroid Build Coastguard Worker class NVPTXTargetLowering : public TargetLowering { 440*9880d681SAndroid Build Coastguard Worker public: 441*9880d681SAndroid Build Coastguard Worker explicit NVPTXTargetLowering(const NVPTXTargetMachine &TM, 442*9880d681SAndroid Build Coastguard Worker const NVPTXSubtarget &STI); 443*9880d681SAndroid Build Coastguard Worker SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override; 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Worker SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const; 446*9880d681SAndroid Build Coastguard Worker 447*9880d681SAndroid Build Coastguard Worker const char *getTargetNodeName(unsigned Opcode) const override; 448*9880d681SAndroid Build Coastguard Worker 449*9880d681SAndroid Build Coastguard Worker bool getTgtMemIntrinsic(IntrinsicInfo &Info, const CallInst &I, 450*9880d681SAndroid Build Coastguard Worker unsigned Intrinsic) const override; 451*9880d681SAndroid Build Coastguard Worker 452*9880d681SAndroid Build Coastguard Worker /// isLegalAddressingMode - Return true if the addressing mode represented 453*9880d681SAndroid Build Coastguard Worker /// by AM is legal for this target, for a load/store of the specified type 454*9880d681SAndroid Build Coastguard Worker /// Used to guide target specific optimizations, like loop strength 455*9880d681SAndroid Build Coastguard Worker /// reduction (LoopStrengthReduce.cpp) and memory optimization for 456*9880d681SAndroid Build Coastguard Worker /// address mode (CodeGenPrepare.cpp) 457*9880d681SAndroid Build Coastguard Worker bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM, Type *Ty, 458*9880d681SAndroid Build Coastguard Worker unsigned AS) const override; 459*9880d681SAndroid Build Coastguard Worker isTruncateFree(Type * SrcTy,Type * DstTy)460*9880d681SAndroid Build Coastguard Worker bool isTruncateFree(Type *SrcTy, Type *DstTy) const override { 461*9880d681SAndroid Build Coastguard Worker // Truncating 64-bit to 32-bit is free in SASS. 462*9880d681SAndroid Build Coastguard Worker if (!SrcTy->isIntegerTy() || !DstTy->isIntegerTy()) 463*9880d681SAndroid Build Coastguard Worker return false; 464*9880d681SAndroid Build Coastguard Worker return SrcTy->getPrimitiveSizeInBits() == 64 && 465*9880d681SAndroid Build Coastguard Worker DstTy->getPrimitiveSizeInBits() == 32; 466*9880d681SAndroid Build Coastguard Worker } 467*9880d681SAndroid Build Coastguard Worker getSetCCResultType(const DataLayout & DL,LLVMContext & Ctx,EVT VT)468*9880d681SAndroid Build Coastguard Worker EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Ctx, 469*9880d681SAndroid Build Coastguard Worker EVT VT) const override { 470*9880d681SAndroid Build Coastguard Worker if (VT.isVector()) 471*9880d681SAndroid Build Coastguard Worker return EVT::getVectorVT(Ctx, MVT::i1, VT.getVectorNumElements()); 472*9880d681SAndroid Build Coastguard Worker return MVT::i1; 473*9880d681SAndroid Build Coastguard Worker } 474*9880d681SAndroid Build Coastguard Worker 475*9880d681SAndroid Build Coastguard Worker ConstraintType getConstraintType(StringRef Constraint) const override; 476*9880d681SAndroid Build Coastguard Worker std::pair<unsigned, const TargetRegisterClass *> 477*9880d681SAndroid Build Coastguard Worker getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI, 478*9880d681SAndroid Build Coastguard Worker StringRef Constraint, MVT VT) const override; 479*9880d681SAndroid Build Coastguard Worker 480*9880d681SAndroid Build Coastguard Worker SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, 481*9880d681SAndroid Build Coastguard Worker bool isVarArg, 482*9880d681SAndroid Build Coastguard Worker const SmallVectorImpl<ISD::InputArg> &Ins, 483*9880d681SAndroid Build Coastguard Worker const SDLoc &dl, SelectionDAG &DAG, 484*9880d681SAndroid Build Coastguard Worker SmallVectorImpl<SDValue> &InVals) const override; 485*9880d681SAndroid Build Coastguard Worker 486*9880d681SAndroid Build Coastguard Worker SDValue LowerCall(CallLoweringInfo &CLI, 487*9880d681SAndroid Build Coastguard Worker SmallVectorImpl<SDValue> &InVals) const override; 488*9880d681SAndroid Build Coastguard Worker 489*9880d681SAndroid Build Coastguard Worker std::string getPrototype(const DataLayout &DL, Type *, const ArgListTy &, 490*9880d681SAndroid Build Coastguard Worker const SmallVectorImpl<ISD::OutputArg> &, 491*9880d681SAndroid Build Coastguard Worker unsigned retAlignment, 492*9880d681SAndroid Build Coastguard Worker const ImmutableCallSite *CS) const; 493*9880d681SAndroid Build Coastguard Worker 494*9880d681SAndroid Build Coastguard Worker SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg, 495*9880d681SAndroid Build Coastguard Worker const SmallVectorImpl<ISD::OutputArg> &Outs, 496*9880d681SAndroid Build Coastguard Worker const SmallVectorImpl<SDValue> &OutVals, const SDLoc &dl, 497*9880d681SAndroid Build Coastguard Worker SelectionDAG &DAG) const override; 498*9880d681SAndroid Build Coastguard Worker 499*9880d681SAndroid Build Coastguard Worker void LowerAsmOperandForConstraint(SDValue Op, std::string &Constraint, 500*9880d681SAndroid Build Coastguard Worker std::vector<SDValue> &Ops, 501*9880d681SAndroid Build Coastguard Worker SelectionDAG &DAG) const override; 502*9880d681SAndroid Build Coastguard Worker 503*9880d681SAndroid Build Coastguard Worker const NVPTXTargetMachine *nvTM; 504*9880d681SAndroid Build Coastguard Worker 505*9880d681SAndroid Build Coastguard Worker // PTX always uses 32-bit shift amounts getScalarShiftAmountTy(const DataLayout &,EVT)506*9880d681SAndroid Build Coastguard Worker MVT getScalarShiftAmountTy(const DataLayout &, EVT) const override { 507*9880d681SAndroid Build Coastguard Worker return MVT::i32; 508*9880d681SAndroid Build Coastguard Worker } 509*9880d681SAndroid Build Coastguard Worker 510*9880d681SAndroid Build Coastguard Worker TargetLoweringBase::LegalizeTypeAction 511*9880d681SAndroid Build Coastguard Worker getPreferredVectorAction(EVT VT) const override; 512*9880d681SAndroid Build Coastguard Worker 513*9880d681SAndroid Build Coastguard Worker bool allowFMA(MachineFunction &MF, CodeGenOpt::Level OptLevel) const; 514*9880d681SAndroid Build Coastguard Worker isFMAFasterThanFMulAndFAdd(EVT)515*9880d681SAndroid Build Coastguard Worker bool isFMAFasterThanFMulAndFAdd(EVT) const override { return true; } 516*9880d681SAndroid Build Coastguard Worker enableAggressiveFMAFusion(EVT VT)517*9880d681SAndroid Build Coastguard Worker bool enableAggressiveFMAFusion(EVT VT) const override { return true; } 518*9880d681SAndroid Build Coastguard Worker 519*9880d681SAndroid Build Coastguard Worker private: 520*9880d681SAndroid Build Coastguard Worker const NVPTXSubtarget &STI; // cache the subtarget here 521*9880d681SAndroid Build Coastguard Worker SDValue getParamSymbol(SelectionDAG &DAG, int idx, EVT) const; 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Worker SDValue LowerCONCAT_VECTORS(SDValue Op, SelectionDAG &DAG) const; 524*9880d681SAndroid Build Coastguard Worker 525*9880d681SAndroid Build Coastguard Worker SDValue LowerLOAD(SDValue Op, SelectionDAG &DAG) const; 526*9880d681SAndroid Build Coastguard Worker SDValue LowerLOADi1(SDValue Op, SelectionDAG &DAG) const; 527*9880d681SAndroid Build Coastguard Worker 528*9880d681SAndroid Build Coastguard Worker SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG) const; 529*9880d681SAndroid Build Coastguard Worker SDValue LowerSTOREi1(SDValue Op, SelectionDAG &DAG) const; 530*9880d681SAndroid Build Coastguard Worker SDValue LowerSTOREVector(SDValue Op, SelectionDAG &DAG) const; 531*9880d681SAndroid Build Coastguard Worker 532*9880d681SAndroid Build Coastguard Worker SDValue LowerShiftRightParts(SDValue Op, SelectionDAG &DAG) const; 533*9880d681SAndroid Build Coastguard Worker SDValue LowerShiftLeftParts(SDValue Op, SelectionDAG &DAG) const; 534*9880d681SAndroid Build Coastguard Worker 535*9880d681SAndroid Build Coastguard Worker SDValue LowerSelect(SDValue Op, SelectionDAG &DAG) const; 536*9880d681SAndroid Build Coastguard Worker 537*9880d681SAndroid Build Coastguard Worker void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue> &Results, 538*9880d681SAndroid Build Coastguard Worker SelectionDAG &DAG) const override; 539*9880d681SAndroid Build Coastguard Worker SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override; 540*9880d681SAndroid Build Coastguard Worker 541*9880d681SAndroid Build Coastguard Worker unsigned getArgumentAlignment(SDValue Callee, const ImmutableCallSite *CS, 542*9880d681SAndroid Build Coastguard Worker Type *Ty, unsigned Idx) const; 543*9880d681SAndroid Build Coastguard Worker }; 544*9880d681SAndroid Build Coastguard Worker } // namespace llvm 545*9880d681SAndroid Build Coastguard Worker 546*9880d681SAndroid Build Coastguard Worker #endif 547