Path: blob/main/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXReplaceImageHandles.cpp
35271 views
//===-- NVPTXReplaceImageHandles.cpp - Replace image handles for Fermi ----===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// On Fermi, image handles are not supported. To work around this, we traverse9// the machine code and replace image handles with concrete symbols. For this10// to work reliably, inlining of all function call must be performed.11//12//===----------------------------------------------------------------------===//1314#include "NVPTX.h"15#include "NVPTXMachineFunctionInfo.h"16#include "NVPTXSubtarget.h"17#include "NVPTXTargetMachine.h"18#include "MCTargetDesc/NVPTXBaseInfo.h"19#include "llvm/ADT/DenseSet.h"20#include "llvm/CodeGen/MachineFunction.h"21#include "llvm/CodeGen/MachineFunctionPass.h"22#include "llvm/CodeGen/MachineRegisterInfo.h"23#include "llvm/Support/raw_ostream.h"2425using namespace llvm;2627namespace {28class NVPTXReplaceImageHandles : public MachineFunctionPass {29private:30static char ID;31DenseSet<MachineInstr *> InstrsToRemove;3233public:34NVPTXReplaceImageHandles();3536bool runOnMachineFunction(MachineFunction &MF) override;3738StringRef getPassName() const override {39return "NVPTX Replace Image Handles";40}41private:42bool processInstr(MachineInstr &MI);43bool replaceImageHandle(MachineOperand &Op, MachineFunction &MF);44bool findIndexForHandle(MachineOperand &Op, MachineFunction &MF,45unsigned &Idx);46};47}4849char NVPTXReplaceImageHandles::ID = 0;5051NVPTXReplaceImageHandles::NVPTXReplaceImageHandles()52: MachineFunctionPass(ID) {}5354bool NVPTXReplaceImageHandles::runOnMachineFunction(MachineFunction &MF) {55bool Changed = false;56InstrsToRemove.clear();5758for (MachineBasicBlock &MBB : MF)59for (MachineInstr &MI : MBB)60Changed |= processInstr(MI);6162// Now clean up any handle-access instructions63// This is needed in debug mode when code cleanup passes are not executed,64// but we need the handle access to be eliminated because they are not65// valid instructions when image handles are disabled.66for (MachineInstr *MI : InstrsToRemove) {67unsigned DefReg = MI->getOperand(0).getReg();68// Only these that are not used can be removed.69if (MF.getRegInfo().use_nodbg_empty(DefReg))70MI->eraseFromParent();71}72return Changed;73}7475static unsigned suldRegisterToIndexOpcode(unsigned RegOC) {76switch (RegOC) {77case NVPTX::SULD_1D_I8_CLAMP_R:78return NVPTX::SULD_1D_I8_CLAMP_I;79case NVPTX::SULD_1D_I16_CLAMP_R:80return NVPTX::SULD_1D_I16_CLAMP_I;81case NVPTX::SULD_1D_I32_CLAMP_R:82return NVPTX::SULD_1D_I32_CLAMP_I;83case NVPTX::SULD_1D_I64_CLAMP_R:84return NVPTX::SULD_1D_I64_CLAMP_I;85case NVPTX::SULD_1D_ARRAY_I8_CLAMP_R:86return NVPTX::SULD_1D_ARRAY_I8_CLAMP_I;87case NVPTX::SULD_1D_ARRAY_I16_CLAMP_R:88return NVPTX::SULD_1D_ARRAY_I16_CLAMP_I;89case NVPTX::SULD_1D_ARRAY_I32_CLAMP_R:90return NVPTX::SULD_1D_ARRAY_I32_CLAMP_I;91case NVPTX::SULD_1D_ARRAY_I64_CLAMP_R:92return NVPTX::SULD_1D_ARRAY_I64_CLAMP_I;93case NVPTX::SULD_2D_I8_CLAMP_R:94return NVPTX::SULD_2D_I8_CLAMP_I;95case NVPTX::SULD_2D_I16_CLAMP_R:96return NVPTX::SULD_2D_I16_CLAMP_I;97case NVPTX::SULD_2D_I32_CLAMP_R:98return NVPTX::SULD_2D_I32_CLAMP_I;99case NVPTX::SULD_2D_I64_CLAMP_R:100return NVPTX::SULD_2D_I64_CLAMP_I;101case NVPTX::SULD_2D_ARRAY_I8_CLAMP_R:102return NVPTX::SULD_2D_ARRAY_I8_CLAMP_I;103case NVPTX::SULD_2D_ARRAY_I16_CLAMP_R:104return NVPTX::SULD_2D_ARRAY_I16_CLAMP_I;105case NVPTX::SULD_2D_ARRAY_I32_CLAMP_R:106return NVPTX::SULD_2D_ARRAY_I32_CLAMP_I;107case NVPTX::SULD_2D_ARRAY_I64_CLAMP_R:108return NVPTX::SULD_2D_ARRAY_I64_CLAMP_I;109case NVPTX::SULD_3D_I8_CLAMP_R:110return NVPTX::SULD_3D_I8_CLAMP_I;111case NVPTX::SULD_3D_I16_CLAMP_R:112return NVPTX::SULD_3D_I16_CLAMP_I;113case NVPTX::SULD_3D_I32_CLAMP_R:114return NVPTX::SULD_3D_I32_CLAMP_I;115case NVPTX::SULD_3D_I64_CLAMP_R:116return NVPTX::SULD_3D_I64_CLAMP_I;117case NVPTX::SULD_1D_V2I8_CLAMP_R:118return NVPTX::SULD_1D_V2I8_CLAMP_I;119case NVPTX::SULD_1D_V2I16_CLAMP_R:120return NVPTX::SULD_1D_V2I16_CLAMP_I;121case NVPTX::SULD_1D_V2I32_CLAMP_R:122return NVPTX::SULD_1D_V2I32_CLAMP_I;123case NVPTX::SULD_1D_V2I64_CLAMP_R:124return NVPTX::SULD_1D_V2I64_CLAMP_I;125case NVPTX::SULD_1D_ARRAY_V2I8_CLAMP_R:126return NVPTX::SULD_1D_ARRAY_V2I8_CLAMP_I;127case NVPTX::SULD_1D_ARRAY_V2I16_CLAMP_R:128return NVPTX::SULD_1D_ARRAY_V2I16_CLAMP_I;129case NVPTX::SULD_1D_ARRAY_V2I32_CLAMP_R:130return NVPTX::SULD_1D_ARRAY_V2I32_CLAMP_I;131case NVPTX::SULD_1D_ARRAY_V2I64_CLAMP_R:132return NVPTX::SULD_1D_ARRAY_V2I64_CLAMP_I;133case NVPTX::SULD_2D_V2I8_CLAMP_R:134return NVPTX::SULD_2D_V2I8_CLAMP_I;135case NVPTX::SULD_2D_V2I16_CLAMP_R:136return NVPTX::SULD_2D_V2I16_CLAMP_I;137case NVPTX::SULD_2D_V2I32_CLAMP_R:138return NVPTX::SULD_2D_V2I32_CLAMP_I;139case NVPTX::SULD_2D_V2I64_CLAMP_R:140return NVPTX::SULD_2D_V2I64_CLAMP_I;141case NVPTX::SULD_2D_ARRAY_V2I8_CLAMP_R:142return NVPTX::SULD_2D_ARRAY_V2I8_CLAMP_I;143case NVPTX::SULD_2D_ARRAY_V2I16_CLAMP_R:144return NVPTX::SULD_2D_ARRAY_V2I16_CLAMP_I;145case NVPTX::SULD_2D_ARRAY_V2I32_CLAMP_R:146return NVPTX::SULD_2D_ARRAY_V2I32_CLAMP_I;147case NVPTX::SULD_2D_ARRAY_V2I64_CLAMP_R:148return NVPTX::SULD_2D_ARRAY_V2I64_CLAMP_I;149case NVPTX::SULD_3D_V2I8_CLAMP_R:150return NVPTX::SULD_3D_V2I8_CLAMP_I;151case NVPTX::SULD_3D_V2I16_CLAMP_R:152return NVPTX::SULD_3D_V2I16_CLAMP_I;153case NVPTX::SULD_3D_V2I32_CLAMP_R:154return NVPTX::SULD_3D_V2I32_CLAMP_I;155case NVPTX::SULD_3D_V2I64_CLAMP_R:156return NVPTX::SULD_3D_V2I64_CLAMP_I;157case NVPTX::SULD_1D_V4I8_CLAMP_R:158return NVPTX::SULD_1D_V4I8_CLAMP_I;159case NVPTX::SULD_1D_V4I16_CLAMP_R:160return NVPTX::SULD_1D_V4I16_CLAMP_I;161case NVPTX::SULD_1D_V4I32_CLAMP_R:162return NVPTX::SULD_1D_V4I32_CLAMP_I;163case NVPTX::SULD_1D_ARRAY_V4I8_CLAMP_R:164return NVPTX::SULD_1D_ARRAY_V4I8_CLAMP_I;165case NVPTX::SULD_1D_ARRAY_V4I16_CLAMP_R:166return NVPTX::SULD_1D_ARRAY_V4I16_CLAMP_I;167case NVPTX::SULD_1D_ARRAY_V4I32_CLAMP_R:168return NVPTX::SULD_1D_ARRAY_V4I32_CLAMP_I;169case NVPTX::SULD_2D_V4I8_CLAMP_R:170return NVPTX::SULD_2D_V4I8_CLAMP_I;171case NVPTX::SULD_2D_V4I16_CLAMP_R:172return NVPTX::SULD_2D_V4I16_CLAMP_I;173case NVPTX::SULD_2D_V4I32_CLAMP_R:174return NVPTX::SULD_2D_V4I32_CLAMP_I;175case NVPTX::SULD_2D_ARRAY_V4I8_CLAMP_R:176return NVPTX::SULD_2D_ARRAY_V4I8_CLAMP_I;177case NVPTX::SULD_2D_ARRAY_V4I16_CLAMP_R:178return NVPTX::SULD_2D_ARRAY_V4I16_CLAMP_I;179case NVPTX::SULD_2D_ARRAY_V4I32_CLAMP_R:180return NVPTX::SULD_2D_ARRAY_V4I32_CLAMP_I;181case NVPTX::SULD_3D_V4I8_CLAMP_R:182return NVPTX::SULD_3D_V4I8_CLAMP_I;183case NVPTX::SULD_3D_V4I16_CLAMP_R:184return NVPTX::SULD_3D_V4I16_CLAMP_I;185case NVPTX::SULD_3D_V4I32_CLAMP_R:186return NVPTX::SULD_3D_V4I32_CLAMP_I;187case NVPTX::SULD_1D_I8_TRAP_R:188return NVPTX::SULD_1D_I8_TRAP_I;189case NVPTX::SULD_1D_I16_TRAP_R:190return NVPTX::SULD_1D_I16_TRAP_I;191case NVPTX::SULD_1D_I32_TRAP_R:192return NVPTX::SULD_1D_I32_TRAP_I;193case NVPTX::SULD_1D_I64_TRAP_R:194return NVPTX::SULD_1D_I64_TRAP_I;195case NVPTX::SULD_1D_ARRAY_I8_TRAP_R:196return NVPTX::SULD_1D_ARRAY_I8_TRAP_I;197case NVPTX::SULD_1D_ARRAY_I16_TRAP_R:198return NVPTX::SULD_1D_ARRAY_I16_TRAP_I;199case NVPTX::SULD_1D_ARRAY_I32_TRAP_R:200return NVPTX::SULD_1D_ARRAY_I32_TRAP_I;201case NVPTX::SULD_1D_ARRAY_I64_TRAP_R:202return NVPTX::SULD_1D_ARRAY_I64_TRAP_I;203case NVPTX::SULD_2D_I8_TRAP_R:204return NVPTX::SULD_2D_I8_TRAP_I;205case NVPTX::SULD_2D_I16_TRAP_R:206return NVPTX::SULD_2D_I16_TRAP_I;207case NVPTX::SULD_2D_I32_TRAP_R:208return NVPTX::SULD_2D_I32_TRAP_I;209case NVPTX::SULD_2D_I64_TRAP_R:210return NVPTX::SULD_2D_I64_TRAP_I;211case NVPTX::SULD_2D_ARRAY_I8_TRAP_R:212return NVPTX::SULD_2D_ARRAY_I8_TRAP_I;213case NVPTX::SULD_2D_ARRAY_I16_TRAP_R:214return NVPTX::SULD_2D_ARRAY_I16_TRAP_I;215case NVPTX::SULD_2D_ARRAY_I32_TRAP_R:216return NVPTX::SULD_2D_ARRAY_I32_TRAP_I;217case NVPTX::SULD_2D_ARRAY_I64_TRAP_R:218return NVPTX::SULD_2D_ARRAY_I64_TRAP_I;219case NVPTX::SULD_3D_I8_TRAP_R:220return NVPTX::SULD_3D_I8_TRAP_I;221case NVPTX::SULD_3D_I16_TRAP_R:222return NVPTX::SULD_3D_I16_TRAP_I;223case NVPTX::SULD_3D_I32_TRAP_R:224return NVPTX::SULD_3D_I32_TRAP_I;225case NVPTX::SULD_3D_I64_TRAP_R:226return NVPTX::SULD_3D_I64_TRAP_I;227case NVPTX::SULD_1D_V2I8_TRAP_R:228return NVPTX::SULD_1D_V2I8_TRAP_I;229case NVPTX::SULD_1D_V2I16_TRAP_R:230return NVPTX::SULD_1D_V2I16_TRAP_I;231case NVPTX::SULD_1D_V2I32_TRAP_R:232return NVPTX::SULD_1D_V2I32_TRAP_I;233case NVPTX::SULD_1D_V2I64_TRAP_R:234return NVPTX::SULD_1D_V2I64_TRAP_I;235case NVPTX::SULD_1D_ARRAY_V2I8_TRAP_R:236return NVPTX::SULD_1D_ARRAY_V2I8_TRAP_I;237case NVPTX::SULD_1D_ARRAY_V2I16_TRAP_R:238return NVPTX::SULD_1D_ARRAY_V2I16_TRAP_I;239case NVPTX::SULD_1D_ARRAY_V2I32_TRAP_R:240return NVPTX::SULD_1D_ARRAY_V2I32_TRAP_I;241case NVPTX::SULD_1D_ARRAY_V2I64_TRAP_R:242return NVPTX::SULD_1D_ARRAY_V2I64_TRAP_I;243case NVPTX::SULD_2D_V2I8_TRAP_R:244return NVPTX::SULD_2D_V2I8_TRAP_I;245case NVPTX::SULD_2D_V2I16_TRAP_R:246return NVPTX::SULD_2D_V2I16_TRAP_I;247case NVPTX::SULD_2D_V2I32_TRAP_R:248return NVPTX::SULD_2D_V2I32_TRAP_I;249case NVPTX::SULD_2D_V2I64_TRAP_R:250return NVPTX::SULD_2D_V2I64_TRAP_I;251case NVPTX::SULD_2D_ARRAY_V2I8_TRAP_R:252return NVPTX::SULD_2D_ARRAY_V2I8_TRAP_I;253case NVPTX::SULD_2D_ARRAY_V2I16_TRAP_R:254return NVPTX::SULD_2D_ARRAY_V2I16_TRAP_I;255case NVPTX::SULD_2D_ARRAY_V2I32_TRAP_R:256return NVPTX::SULD_2D_ARRAY_V2I32_TRAP_I;257case NVPTX::SULD_2D_ARRAY_V2I64_TRAP_R:258return NVPTX::SULD_2D_ARRAY_V2I64_TRAP_I;259case NVPTX::SULD_3D_V2I8_TRAP_R:260return NVPTX::SULD_3D_V2I8_TRAP_I;261case NVPTX::SULD_3D_V2I16_TRAP_R:262return NVPTX::SULD_3D_V2I16_TRAP_I;263case NVPTX::SULD_3D_V2I32_TRAP_R:264return NVPTX::SULD_3D_V2I32_TRAP_I;265case NVPTX::SULD_3D_V2I64_TRAP_R:266return NVPTX::SULD_3D_V2I64_TRAP_I;267case NVPTX::SULD_1D_V4I8_TRAP_R:268return NVPTX::SULD_1D_V4I8_TRAP_I;269case NVPTX::SULD_1D_V4I16_TRAP_R:270return NVPTX::SULD_1D_V4I16_TRAP_I;271case NVPTX::SULD_1D_V4I32_TRAP_R:272return NVPTX::SULD_1D_V4I32_TRAP_I;273case NVPTX::SULD_1D_ARRAY_V4I8_TRAP_R:274return NVPTX::SULD_1D_ARRAY_V4I8_TRAP_I;275case NVPTX::SULD_1D_ARRAY_V4I16_TRAP_R:276return NVPTX::SULD_1D_ARRAY_V4I16_TRAP_I;277case NVPTX::SULD_1D_ARRAY_V4I32_TRAP_R:278return NVPTX::SULD_1D_ARRAY_V4I32_TRAP_I;279case NVPTX::SULD_2D_V4I8_TRAP_R:280return NVPTX::SULD_2D_V4I8_TRAP_I;281case NVPTX::SULD_2D_V4I16_TRAP_R:282return NVPTX::SULD_2D_V4I16_TRAP_I;283case NVPTX::SULD_2D_V4I32_TRAP_R:284return NVPTX::SULD_2D_V4I32_TRAP_I;285case NVPTX::SULD_2D_ARRAY_V4I8_TRAP_R:286return NVPTX::SULD_2D_ARRAY_V4I8_TRAP_I;287case NVPTX::SULD_2D_ARRAY_V4I16_TRAP_R:288return NVPTX::SULD_2D_ARRAY_V4I16_TRAP_I;289case NVPTX::SULD_2D_ARRAY_V4I32_TRAP_R:290return NVPTX::SULD_2D_ARRAY_V4I32_TRAP_I;291case NVPTX::SULD_3D_V4I8_TRAP_R:292return NVPTX::SULD_3D_V4I8_TRAP_I;293case NVPTX::SULD_3D_V4I16_TRAP_R:294return NVPTX::SULD_3D_V4I16_TRAP_I;295case NVPTX::SULD_3D_V4I32_TRAP_R:296return NVPTX::SULD_3D_V4I32_TRAP_I;297case NVPTX::SULD_1D_I8_ZERO_R:298return NVPTX::SULD_1D_I8_ZERO_I;299case NVPTX::SULD_1D_I16_ZERO_R:300return NVPTX::SULD_1D_I16_ZERO_I;301case NVPTX::SULD_1D_I32_ZERO_R:302return NVPTX::SULD_1D_I32_ZERO_I;303case NVPTX::SULD_1D_I64_ZERO_R:304return NVPTX::SULD_1D_I64_ZERO_I;305case NVPTX::SULD_1D_ARRAY_I8_ZERO_R:306return NVPTX::SULD_1D_ARRAY_I8_ZERO_I;307case NVPTX::SULD_1D_ARRAY_I16_ZERO_R:308return NVPTX::SULD_1D_ARRAY_I16_ZERO_I;309case NVPTX::SULD_1D_ARRAY_I32_ZERO_R:310return NVPTX::SULD_1D_ARRAY_I32_ZERO_I;311case NVPTX::SULD_1D_ARRAY_I64_ZERO_R:312return NVPTX::SULD_1D_ARRAY_I64_ZERO_I;313case NVPTX::SULD_2D_I8_ZERO_R:314return NVPTX::SULD_2D_I8_ZERO_I;315case NVPTX::SULD_2D_I16_ZERO_R:316return NVPTX::SULD_2D_I16_ZERO_I;317case NVPTX::SULD_2D_I32_ZERO_R:318return NVPTX::SULD_2D_I32_ZERO_I;319case NVPTX::SULD_2D_I64_ZERO_R:320return NVPTX::SULD_2D_I64_ZERO_I;321case NVPTX::SULD_2D_ARRAY_I8_ZERO_R:322return NVPTX::SULD_2D_ARRAY_I8_ZERO_I;323case NVPTX::SULD_2D_ARRAY_I16_ZERO_R:324return NVPTX::SULD_2D_ARRAY_I16_ZERO_I;325case NVPTX::SULD_2D_ARRAY_I32_ZERO_R:326return NVPTX::SULD_2D_ARRAY_I32_ZERO_I;327case NVPTX::SULD_2D_ARRAY_I64_ZERO_R:328return NVPTX::SULD_2D_ARRAY_I64_ZERO_I;329case NVPTX::SULD_3D_I8_ZERO_R:330return NVPTX::SULD_3D_I8_ZERO_I;331case NVPTX::SULD_3D_I16_ZERO_R:332return NVPTX::SULD_3D_I16_ZERO_I;333case NVPTX::SULD_3D_I32_ZERO_R:334return NVPTX::SULD_3D_I32_ZERO_I;335case NVPTX::SULD_3D_I64_ZERO_R:336return NVPTX::SULD_3D_I64_ZERO_I;337case NVPTX::SULD_1D_V2I8_ZERO_R:338return NVPTX::SULD_1D_V2I8_ZERO_I;339case NVPTX::SULD_1D_V2I16_ZERO_R:340return NVPTX::SULD_1D_V2I16_ZERO_I;341case NVPTX::SULD_1D_V2I32_ZERO_R:342return NVPTX::SULD_1D_V2I32_ZERO_I;343case NVPTX::SULD_1D_V2I64_ZERO_R:344return NVPTX::SULD_1D_V2I64_ZERO_I;345case NVPTX::SULD_1D_ARRAY_V2I8_ZERO_R:346return NVPTX::SULD_1D_ARRAY_V2I8_ZERO_I;347case NVPTX::SULD_1D_ARRAY_V2I16_ZERO_R:348return NVPTX::SULD_1D_ARRAY_V2I16_ZERO_I;349case NVPTX::SULD_1D_ARRAY_V2I32_ZERO_R:350return NVPTX::SULD_1D_ARRAY_V2I32_ZERO_I;351case NVPTX::SULD_1D_ARRAY_V2I64_ZERO_R:352return NVPTX::SULD_1D_ARRAY_V2I64_ZERO_I;353case NVPTX::SULD_2D_V2I8_ZERO_R:354return NVPTX::SULD_2D_V2I8_ZERO_I;355case NVPTX::SULD_2D_V2I16_ZERO_R:356return NVPTX::SULD_2D_V2I16_ZERO_I;357case NVPTX::SULD_2D_V2I32_ZERO_R:358return NVPTX::SULD_2D_V2I32_ZERO_I;359case NVPTX::SULD_2D_V2I64_ZERO_R:360return NVPTX::SULD_2D_V2I64_ZERO_I;361case NVPTX::SULD_2D_ARRAY_V2I8_ZERO_R:362return NVPTX::SULD_2D_ARRAY_V2I8_ZERO_I;363case NVPTX::SULD_2D_ARRAY_V2I16_ZERO_R:364return NVPTX::SULD_2D_ARRAY_V2I16_ZERO_I;365case NVPTX::SULD_2D_ARRAY_V2I32_ZERO_R:366return NVPTX::SULD_2D_ARRAY_V2I32_ZERO_I;367case NVPTX::SULD_2D_ARRAY_V2I64_ZERO_R:368return NVPTX::SULD_2D_ARRAY_V2I64_ZERO_I;369case NVPTX::SULD_3D_V2I8_ZERO_R:370return NVPTX::SULD_3D_V2I8_ZERO_I;371case NVPTX::SULD_3D_V2I16_ZERO_R:372return NVPTX::SULD_3D_V2I16_ZERO_I;373case NVPTX::SULD_3D_V2I32_ZERO_R:374return NVPTX::SULD_3D_V2I32_ZERO_I;375case NVPTX::SULD_3D_V2I64_ZERO_R:376return NVPTX::SULD_3D_V2I64_ZERO_I;377case NVPTX::SULD_1D_V4I8_ZERO_R:378return NVPTX::SULD_1D_V4I8_ZERO_I;379case NVPTX::SULD_1D_V4I16_ZERO_R:380return NVPTX::SULD_1D_V4I16_ZERO_I;381case NVPTX::SULD_1D_V4I32_ZERO_R:382return NVPTX::SULD_1D_V4I32_ZERO_I;383case NVPTX::SULD_1D_ARRAY_V4I8_ZERO_R:384return NVPTX::SULD_1D_ARRAY_V4I8_ZERO_I;385case NVPTX::SULD_1D_ARRAY_V4I16_ZERO_R:386return NVPTX::SULD_1D_ARRAY_V4I16_ZERO_I;387case NVPTX::SULD_1D_ARRAY_V4I32_ZERO_R:388return NVPTX::SULD_1D_ARRAY_V4I32_ZERO_I;389case NVPTX::SULD_2D_V4I8_ZERO_R:390return NVPTX::SULD_2D_V4I8_ZERO_I;391case NVPTX::SULD_2D_V4I16_ZERO_R:392return NVPTX::SULD_2D_V4I16_ZERO_I;393case NVPTX::SULD_2D_V4I32_ZERO_R:394return NVPTX::SULD_2D_V4I32_ZERO_I;395case NVPTX::SULD_2D_ARRAY_V4I8_ZERO_R:396return NVPTX::SULD_2D_ARRAY_V4I8_ZERO_I;397case NVPTX::SULD_2D_ARRAY_V4I16_ZERO_R:398return NVPTX::SULD_2D_ARRAY_V4I16_ZERO_I;399case NVPTX::SULD_2D_ARRAY_V4I32_ZERO_R:400return NVPTX::SULD_2D_ARRAY_V4I32_ZERO_I;401case NVPTX::SULD_3D_V4I8_ZERO_R:402return NVPTX::SULD_3D_V4I8_ZERO_I;403case NVPTX::SULD_3D_V4I16_ZERO_R:404return NVPTX::SULD_3D_V4I16_ZERO_I;405case NVPTX::SULD_3D_V4I32_ZERO_R:406return NVPTX::SULD_3D_V4I32_ZERO_I;407default:408llvm_unreachable("Unhandled SULD opcode");409}410}411412static unsigned sustRegisterToIndexOpcode(unsigned RegOC) {413switch (RegOC) {414case NVPTX::SUST_B_1D_B8_CLAMP_R:415return NVPTX::SUST_B_1D_B8_CLAMP_I;416case NVPTX::SUST_B_1D_B16_CLAMP_R:417return NVPTX::SUST_B_1D_B16_CLAMP_I;418case NVPTX::SUST_B_1D_B32_CLAMP_R:419return NVPTX::SUST_B_1D_B32_CLAMP_I;420case NVPTX::SUST_B_1D_B64_CLAMP_R:421return NVPTX::SUST_B_1D_B64_CLAMP_I;422case NVPTX::SUST_B_1D_V2B8_CLAMP_R:423return NVPTX::SUST_B_1D_V2B8_CLAMP_I;424case NVPTX::SUST_B_1D_V2B16_CLAMP_R:425return NVPTX::SUST_B_1D_V2B16_CLAMP_I;426case NVPTX::SUST_B_1D_V2B32_CLAMP_R:427return NVPTX::SUST_B_1D_V2B32_CLAMP_I;428case NVPTX::SUST_B_1D_V2B64_CLAMP_R:429return NVPTX::SUST_B_1D_V2B64_CLAMP_I;430case NVPTX::SUST_B_1D_V4B8_CLAMP_R:431return NVPTX::SUST_B_1D_V4B8_CLAMP_I;432case NVPTX::SUST_B_1D_V4B16_CLAMP_R:433return NVPTX::SUST_B_1D_V4B16_CLAMP_I;434case NVPTX::SUST_B_1D_V4B32_CLAMP_R:435return NVPTX::SUST_B_1D_V4B32_CLAMP_I;436case NVPTX::SUST_B_1D_ARRAY_B8_CLAMP_R:437return NVPTX::SUST_B_1D_ARRAY_B8_CLAMP_I;438case NVPTX::SUST_B_1D_ARRAY_B16_CLAMP_R:439return NVPTX::SUST_B_1D_ARRAY_B16_CLAMP_I;440case NVPTX::SUST_B_1D_ARRAY_B32_CLAMP_R:441return NVPTX::SUST_B_1D_ARRAY_B32_CLAMP_I;442case NVPTX::SUST_B_1D_ARRAY_B64_CLAMP_R:443return NVPTX::SUST_B_1D_ARRAY_B64_CLAMP_I;444case NVPTX::SUST_B_1D_ARRAY_V2B8_CLAMP_R:445return NVPTX::SUST_B_1D_ARRAY_V2B8_CLAMP_I;446case NVPTX::SUST_B_1D_ARRAY_V2B16_CLAMP_R:447return NVPTX::SUST_B_1D_ARRAY_V2B16_CLAMP_I;448case NVPTX::SUST_B_1D_ARRAY_V2B32_CLAMP_R:449return NVPTX::SUST_B_1D_ARRAY_V2B32_CLAMP_I;450case NVPTX::SUST_B_1D_ARRAY_V2B64_CLAMP_R:451return NVPTX::SUST_B_1D_ARRAY_V2B64_CLAMP_I;452case NVPTX::SUST_B_1D_ARRAY_V4B8_CLAMP_R:453return NVPTX::SUST_B_1D_ARRAY_V4B8_CLAMP_I;454case NVPTX::SUST_B_1D_ARRAY_V4B16_CLAMP_R:455return NVPTX::SUST_B_1D_ARRAY_V4B16_CLAMP_I;456case NVPTX::SUST_B_1D_ARRAY_V4B32_CLAMP_R:457return NVPTX::SUST_B_1D_ARRAY_V4B32_CLAMP_I;458case NVPTX::SUST_B_2D_B8_CLAMP_R:459return NVPTX::SUST_B_2D_B8_CLAMP_I;460case NVPTX::SUST_B_2D_B16_CLAMP_R:461return NVPTX::SUST_B_2D_B16_CLAMP_I;462case NVPTX::SUST_B_2D_B32_CLAMP_R:463return NVPTX::SUST_B_2D_B32_CLAMP_I;464case NVPTX::SUST_B_2D_B64_CLAMP_R:465return NVPTX::SUST_B_2D_B64_CLAMP_I;466case NVPTX::SUST_B_2D_V2B8_CLAMP_R:467return NVPTX::SUST_B_2D_V2B8_CLAMP_I;468case NVPTX::SUST_B_2D_V2B16_CLAMP_R:469return NVPTX::SUST_B_2D_V2B16_CLAMP_I;470case NVPTX::SUST_B_2D_V2B32_CLAMP_R:471return NVPTX::SUST_B_2D_V2B32_CLAMP_I;472case NVPTX::SUST_B_2D_V2B64_CLAMP_R:473return NVPTX::SUST_B_2D_V2B64_CLAMP_I;474case NVPTX::SUST_B_2D_V4B8_CLAMP_R:475return NVPTX::SUST_B_2D_V4B8_CLAMP_I;476case NVPTX::SUST_B_2D_V4B16_CLAMP_R:477return NVPTX::SUST_B_2D_V4B16_CLAMP_I;478case NVPTX::SUST_B_2D_V4B32_CLAMP_R:479return NVPTX::SUST_B_2D_V4B32_CLAMP_I;480case NVPTX::SUST_B_2D_ARRAY_B8_CLAMP_R:481return NVPTX::SUST_B_2D_ARRAY_B8_CLAMP_I;482case NVPTX::SUST_B_2D_ARRAY_B16_CLAMP_R:483return NVPTX::SUST_B_2D_ARRAY_B16_CLAMP_I;484case NVPTX::SUST_B_2D_ARRAY_B32_CLAMP_R:485return NVPTX::SUST_B_2D_ARRAY_B32_CLAMP_I;486case NVPTX::SUST_B_2D_ARRAY_B64_CLAMP_R:487return NVPTX::SUST_B_2D_ARRAY_B64_CLAMP_I;488case NVPTX::SUST_B_2D_ARRAY_V2B8_CLAMP_R:489return NVPTX::SUST_B_2D_ARRAY_V2B8_CLAMP_I;490case NVPTX::SUST_B_2D_ARRAY_V2B16_CLAMP_R:491return NVPTX::SUST_B_2D_ARRAY_V2B16_CLAMP_I;492case NVPTX::SUST_B_2D_ARRAY_V2B32_CLAMP_R:493return NVPTX::SUST_B_2D_ARRAY_V2B32_CLAMP_I;494case NVPTX::SUST_B_2D_ARRAY_V2B64_CLAMP_R:495return NVPTX::SUST_B_2D_ARRAY_V2B64_CLAMP_I;496case NVPTX::SUST_B_2D_ARRAY_V4B8_CLAMP_R:497return NVPTX::SUST_B_2D_ARRAY_V4B8_CLAMP_I;498case NVPTX::SUST_B_2D_ARRAY_V4B16_CLAMP_R:499return NVPTX::SUST_B_2D_ARRAY_V4B16_CLAMP_I;500case NVPTX::SUST_B_2D_ARRAY_V4B32_CLAMP_R:501return NVPTX::SUST_B_2D_ARRAY_V4B32_CLAMP_I;502case NVPTX::SUST_B_3D_B8_CLAMP_R:503return NVPTX::SUST_B_3D_B8_CLAMP_I;504case NVPTX::SUST_B_3D_B16_CLAMP_R:505return NVPTX::SUST_B_3D_B16_CLAMP_I;506case NVPTX::SUST_B_3D_B32_CLAMP_R:507return NVPTX::SUST_B_3D_B32_CLAMP_I;508case NVPTX::SUST_B_3D_B64_CLAMP_R:509return NVPTX::SUST_B_3D_B64_CLAMP_I;510case NVPTX::SUST_B_3D_V2B8_CLAMP_R:511return NVPTX::SUST_B_3D_V2B8_CLAMP_I;512case NVPTX::SUST_B_3D_V2B16_CLAMP_R:513return NVPTX::SUST_B_3D_V2B16_CLAMP_I;514case NVPTX::SUST_B_3D_V2B32_CLAMP_R:515return NVPTX::SUST_B_3D_V2B32_CLAMP_I;516case NVPTX::SUST_B_3D_V2B64_CLAMP_R:517return NVPTX::SUST_B_3D_V2B64_CLAMP_I;518case NVPTX::SUST_B_3D_V4B8_CLAMP_R:519return NVPTX::SUST_B_3D_V4B8_CLAMP_I;520case NVPTX::SUST_B_3D_V4B16_CLAMP_R:521return NVPTX::SUST_B_3D_V4B16_CLAMP_I;522case NVPTX::SUST_B_3D_V4B32_CLAMP_R:523return NVPTX::SUST_B_3D_V4B32_CLAMP_I;524case NVPTX::SUST_B_1D_B8_TRAP_R:525return NVPTX::SUST_B_1D_B8_TRAP_I;526case NVPTX::SUST_B_1D_B16_TRAP_R:527return NVPTX::SUST_B_1D_B16_TRAP_I;528case NVPTX::SUST_B_1D_B32_TRAP_R:529return NVPTX::SUST_B_1D_B32_TRAP_I;530case NVPTX::SUST_B_1D_B64_TRAP_R:531return NVPTX::SUST_B_1D_B64_TRAP_I;532case NVPTX::SUST_B_1D_V2B8_TRAP_R:533return NVPTX::SUST_B_1D_V2B8_TRAP_I;534case NVPTX::SUST_B_1D_V2B16_TRAP_R:535return NVPTX::SUST_B_1D_V2B16_TRAP_I;536case NVPTX::SUST_B_1D_V2B32_TRAP_R:537return NVPTX::SUST_B_1D_V2B32_TRAP_I;538case NVPTX::SUST_B_1D_V2B64_TRAP_R:539return NVPTX::SUST_B_1D_V2B64_TRAP_I;540case NVPTX::SUST_B_1D_V4B8_TRAP_R:541return NVPTX::SUST_B_1D_V4B8_TRAP_I;542case NVPTX::SUST_B_1D_V4B16_TRAP_R:543return NVPTX::SUST_B_1D_V4B16_TRAP_I;544case NVPTX::SUST_B_1D_V4B32_TRAP_R:545return NVPTX::SUST_B_1D_V4B32_TRAP_I;546case NVPTX::SUST_B_1D_ARRAY_B8_TRAP_R:547return NVPTX::SUST_B_1D_ARRAY_B8_TRAP_I;548case NVPTX::SUST_B_1D_ARRAY_B16_TRAP_R:549return NVPTX::SUST_B_1D_ARRAY_B16_TRAP_I;550case NVPTX::SUST_B_1D_ARRAY_B32_TRAP_R:551return NVPTX::SUST_B_1D_ARRAY_B32_TRAP_I;552case NVPTX::SUST_B_1D_ARRAY_B64_TRAP_R:553return NVPTX::SUST_B_1D_ARRAY_B64_TRAP_I;554case NVPTX::SUST_B_1D_ARRAY_V2B8_TRAP_R:555return NVPTX::SUST_B_1D_ARRAY_V2B8_TRAP_I;556case NVPTX::SUST_B_1D_ARRAY_V2B16_TRAP_R:557return NVPTX::SUST_B_1D_ARRAY_V2B16_TRAP_I;558case NVPTX::SUST_B_1D_ARRAY_V2B32_TRAP_R:559return NVPTX::SUST_B_1D_ARRAY_V2B32_TRAP_I;560case NVPTX::SUST_B_1D_ARRAY_V2B64_TRAP_R:561return NVPTX::SUST_B_1D_ARRAY_V2B64_TRAP_I;562case NVPTX::SUST_B_1D_ARRAY_V4B8_TRAP_R:563return NVPTX::SUST_B_1D_ARRAY_V4B8_TRAP_I;564case NVPTX::SUST_B_1D_ARRAY_V4B16_TRAP_R:565return NVPTX::SUST_B_1D_ARRAY_V4B16_TRAP_I;566case NVPTX::SUST_B_1D_ARRAY_V4B32_TRAP_R:567return NVPTX::SUST_B_1D_ARRAY_V4B32_TRAP_I;568case NVPTX::SUST_B_2D_B8_TRAP_R:569return NVPTX::SUST_B_2D_B8_TRAP_I;570case NVPTX::SUST_B_2D_B16_TRAP_R:571return NVPTX::SUST_B_2D_B16_TRAP_I;572case NVPTX::SUST_B_2D_B32_TRAP_R:573return NVPTX::SUST_B_2D_B32_TRAP_I;574case NVPTX::SUST_B_2D_B64_TRAP_R:575return NVPTX::SUST_B_2D_B64_TRAP_I;576case NVPTX::SUST_B_2D_V2B8_TRAP_R:577return NVPTX::SUST_B_2D_V2B8_TRAP_I;578case NVPTX::SUST_B_2D_V2B16_TRAP_R:579return NVPTX::SUST_B_2D_V2B16_TRAP_I;580case NVPTX::SUST_B_2D_V2B32_TRAP_R:581return NVPTX::SUST_B_2D_V2B32_TRAP_I;582case NVPTX::SUST_B_2D_V2B64_TRAP_R:583return NVPTX::SUST_B_2D_V2B64_TRAP_I;584case NVPTX::SUST_B_2D_V4B8_TRAP_R:585return NVPTX::SUST_B_2D_V4B8_TRAP_I;586case NVPTX::SUST_B_2D_V4B16_TRAP_R:587return NVPTX::SUST_B_2D_V4B16_TRAP_I;588case NVPTX::SUST_B_2D_V4B32_TRAP_R:589return NVPTX::SUST_B_2D_V4B32_TRAP_I;590case NVPTX::SUST_B_2D_ARRAY_B8_TRAP_R:591return NVPTX::SUST_B_2D_ARRAY_B8_TRAP_I;592case NVPTX::SUST_B_2D_ARRAY_B16_TRAP_R:593return NVPTX::SUST_B_2D_ARRAY_B16_TRAP_I;594case NVPTX::SUST_B_2D_ARRAY_B32_TRAP_R:595return NVPTX::SUST_B_2D_ARRAY_B32_TRAP_I;596case NVPTX::SUST_B_2D_ARRAY_B64_TRAP_R:597return NVPTX::SUST_B_2D_ARRAY_B64_TRAP_I;598case NVPTX::SUST_B_2D_ARRAY_V2B8_TRAP_R:599return NVPTX::SUST_B_2D_ARRAY_V2B8_TRAP_I;600case NVPTX::SUST_B_2D_ARRAY_V2B16_TRAP_R:601return NVPTX::SUST_B_2D_ARRAY_V2B16_TRAP_I;602case NVPTX::SUST_B_2D_ARRAY_V2B32_TRAP_R:603return NVPTX::SUST_B_2D_ARRAY_V2B32_TRAP_I;604case NVPTX::SUST_B_2D_ARRAY_V2B64_TRAP_R:605return NVPTX::SUST_B_2D_ARRAY_V2B64_TRAP_I;606case NVPTX::SUST_B_2D_ARRAY_V4B8_TRAP_R:607return NVPTX::SUST_B_2D_ARRAY_V4B8_TRAP_I;608case NVPTX::SUST_B_2D_ARRAY_V4B16_TRAP_R:609return NVPTX::SUST_B_2D_ARRAY_V4B16_TRAP_I;610case NVPTX::SUST_B_2D_ARRAY_V4B32_TRAP_R:611return NVPTX::SUST_B_2D_ARRAY_V4B32_TRAP_I;612case NVPTX::SUST_B_3D_B8_TRAP_R:613return NVPTX::SUST_B_3D_B8_TRAP_I;614case NVPTX::SUST_B_3D_B16_TRAP_R:615return NVPTX::SUST_B_3D_B16_TRAP_I;616case NVPTX::SUST_B_3D_B32_TRAP_R:617return NVPTX::SUST_B_3D_B32_TRAP_I;618case NVPTX::SUST_B_3D_B64_TRAP_R:619return NVPTX::SUST_B_3D_B64_TRAP_I;620case NVPTX::SUST_B_3D_V2B8_TRAP_R:621return NVPTX::SUST_B_3D_V2B8_TRAP_I;622case NVPTX::SUST_B_3D_V2B16_TRAP_R:623return NVPTX::SUST_B_3D_V2B16_TRAP_I;624case NVPTX::SUST_B_3D_V2B32_TRAP_R:625return NVPTX::SUST_B_3D_V2B32_TRAP_I;626case NVPTX::SUST_B_3D_V2B64_TRAP_R:627return NVPTX::SUST_B_3D_V2B64_TRAP_I;628case NVPTX::SUST_B_3D_V4B8_TRAP_R:629return NVPTX::SUST_B_3D_V4B8_TRAP_I;630case NVPTX::SUST_B_3D_V4B16_TRAP_R:631return NVPTX::SUST_B_3D_V4B16_TRAP_I;632case NVPTX::SUST_B_3D_V4B32_TRAP_R:633return NVPTX::SUST_B_3D_V4B32_TRAP_I;634case NVPTX::SUST_B_1D_B8_ZERO_R:635return NVPTX::SUST_B_1D_B8_ZERO_I;636case NVPTX::SUST_B_1D_B16_ZERO_R:637return NVPTX::SUST_B_1D_B16_ZERO_I;638case NVPTX::SUST_B_1D_B32_ZERO_R:639return NVPTX::SUST_B_1D_B32_ZERO_I;640case NVPTX::SUST_B_1D_B64_ZERO_R:641return NVPTX::SUST_B_1D_B64_ZERO_I;642case NVPTX::SUST_B_1D_V2B8_ZERO_R:643return NVPTX::SUST_B_1D_V2B8_ZERO_I;644case NVPTX::SUST_B_1D_V2B16_ZERO_R:645return NVPTX::SUST_B_1D_V2B16_ZERO_I;646case NVPTX::SUST_B_1D_V2B32_ZERO_R:647return NVPTX::SUST_B_1D_V2B32_ZERO_I;648case NVPTX::SUST_B_1D_V2B64_ZERO_R:649return NVPTX::SUST_B_1D_V2B64_ZERO_I;650case NVPTX::SUST_B_1D_V4B8_ZERO_R:651return NVPTX::SUST_B_1D_V4B8_ZERO_I;652case NVPTX::SUST_B_1D_V4B16_ZERO_R:653return NVPTX::SUST_B_1D_V4B16_ZERO_I;654case NVPTX::SUST_B_1D_V4B32_ZERO_R:655return NVPTX::SUST_B_1D_V4B32_ZERO_I;656case NVPTX::SUST_B_1D_ARRAY_B8_ZERO_R:657return NVPTX::SUST_B_1D_ARRAY_B8_ZERO_I;658case NVPTX::SUST_B_1D_ARRAY_B16_ZERO_R:659return NVPTX::SUST_B_1D_ARRAY_B16_ZERO_I;660case NVPTX::SUST_B_1D_ARRAY_B32_ZERO_R:661return NVPTX::SUST_B_1D_ARRAY_B32_ZERO_I;662case NVPTX::SUST_B_1D_ARRAY_B64_ZERO_R:663return NVPTX::SUST_B_1D_ARRAY_B64_ZERO_I;664case NVPTX::SUST_B_1D_ARRAY_V2B8_ZERO_R:665return NVPTX::SUST_B_1D_ARRAY_V2B8_ZERO_I;666case NVPTX::SUST_B_1D_ARRAY_V2B16_ZERO_R:667return NVPTX::SUST_B_1D_ARRAY_V2B16_ZERO_I;668case NVPTX::SUST_B_1D_ARRAY_V2B32_ZERO_R:669return NVPTX::SUST_B_1D_ARRAY_V2B32_ZERO_I;670case NVPTX::SUST_B_1D_ARRAY_V2B64_ZERO_R:671return NVPTX::SUST_B_1D_ARRAY_V2B64_ZERO_I;672case NVPTX::SUST_B_1D_ARRAY_V4B8_ZERO_R:673return NVPTX::SUST_B_1D_ARRAY_V4B8_ZERO_I;674case NVPTX::SUST_B_1D_ARRAY_V4B16_ZERO_R:675return NVPTX::SUST_B_1D_ARRAY_V4B16_ZERO_I;676case NVPTX::SUST_B_1D_ARRAY_V4B32_ZERO_R:677return NVPTX::SUST_B_1D_ARRAY_V4B32_ZERO_I;678case NVPTX::SUST_B_2D_B8_ZERO_R:679return NVPTX::SUST_B_2D_B8_ZERO_I;680case NVPTX::SUST_B_2D_B16_ZERO_R:681return NVPTX::SUST_B_2D_B16_ZERO_I;682case NVPTX::SUST_B_2D_B32_ZERO_R:683return NVPTX::SUST_B_2D_B32_ZERO_I;684case NVPTX::SUST_B_2D_B64_ZERO_R:685return NVPTX::SUST_B_2D_B64_ZERO_I;686case NVPTX::SUST_B_2D_V2B8_ZERO_R:687return NVPTX::SUST_B_2D_V2B8_ZERO_I;688case NVPTX::SUST_B_2D_V2B16_ZERO_R:689return NVPTX::SUST_B_2D_V2B16_ZERO_I;690case NVPTX::SUST_B_2D_V2B32_ZERO_R:691return NVPTX::SUST_B_2D_V2B32_ZERO_I;692case NVPTX::SUST_B_2D_V2B64_ZERO_R:693return NVPTX::SUST_B_2D_V2B64_ZERO_I;694case NVPTX::SUST_B_2D_V4B8_ZERO_R:695return NVPTX::SUST_B_2D_V4B8_ZERO_I;696case NVPTX::SUST_B_2D_V4B16_ZERO_R:697return NVPTX::SUST_B_2D_V4B16_ZERO_I;698case NVPTX::SUST_B_2D_V4B32_ZERO_R:699return NVPTX::SUST_B_2D_V4B32_ZERO_I;700case NVPTX::SUST_B_2D_ARRAY_B8_ZERO_R:701return NVPTX::SUST_B_2D_ARRAY_B8_ZERO_I;702case NVPTX::SUST_B_2D_ARRAY_B16_ZERO_R:703return NVPTX::SUST_B_2D_ARRAY_B16_ZERO_I;704case NVPTX::SUST_B_2D_ARRAY_B32_ZERO_R:705return NVPTX::SUST_B_2D_ARRAY_B32_ZERO_I;706case NVPTX::SUST_B_2D_ARRAY_B64_ZERO_R:707return NVPTX::SUST_B_2D_ARRAY_B64_ZERO_I;708case NVPTX::SUST_B_2D_ARRAY_V2B8_ZERO_R:709return NVPTX::SUST_B_2D_ARRAY_V2B8_ZERO_I;710case NVPTX::SUST_B_2D_ARRAY_V2B16_ZERO_R:711return NVPTX::SUST_B_2D_ARRAY_V2B16_ZERO_I;712case NVPTX::SUST_B_2D_ARRAY_V2B32_ZERO_R:713return NVPTX::SUST_B_2D_ARRAY_V2B32_ZERO_I;714case NVPTX::SUST_B_2D_ARRAY_V2B64_ZERO_R:715return NVPTX::SUST_B_2D_ARRAY_V2B64_ZERO_I;716case NVPTX::SUST_B_2D_ARRAY_V4B8_ZERO_R:717return NVPTX::SUST_B_2D_ARRAY_V4B8_ZERO_I;718case NVPTX::SUST_B_2D_ARRAY_V4B16_ZERO_R:719return NVPTX::SUST_B_2D_ARRAY_V4B16_ZERO_I;720case NVPTX::SUST_B_2D_ARRAY_V4B32_ZERO_R:721return NVPTX::SUST_B_2D_ARRAY_V4B32_ZERO_I;722case NVPTX::SUST_B_3D_B8_ZERO_R:723return NVPTX::SUST_B_3D_B8_ZERO_I;724case NVPTX::SUST_B_3D_B16_ZERO_R:725return NVPTX::SUST_B_3D_B16_ZERO_I;726case NVPTX::SUST_B_3D_B32_ZERO_R:727return NVPTX::SUST_B_3D_B32_ZERO_I;728case NVPTX::SUST_B_3D_B64_ZERO_R:729return NVPTX::SUST_B_3D_B64_ZERO_I;730case NVPTX::SUST_B_3D_V2B8_ZERO_R:731return NVPTX::SUST_B_3D_V2B8_ZERO_I;732case NVPTX::SUST_B_3D_V2B16_ZERO_R:733return NVPTX::SUST_B_3D_V2B16_ZERO_I;734case NVPTX::SUST_B_3D_V2B32_ZERO_R:735return NVPTX::SUST_B_3D_V2B32_ZERO_I;736case NVPTX::SUST_B_3D_V2B64_ZERO_R:737return NVPTX::SUST_B_3D_V2B64_ZERO_I;738case NVPTX::SUST_B_3D_V4B8_ZERO_R:739return NVPTX::SUST_B_3D_V4B8_ZERO_I;740case NVPTX::SUST_B_3D_V4B16_ZERO_R:741return NVPTX::SUST_B_3D_V4B16_ZERO_I;742case NVPTX::SUST_B_3D_V4B32_ZERO_R:743return NVPTX::SUST_B_3D_V4B32_ZERO_I;744case NVPTX::SUST_P_1D_B8_TRAP_R:745return NVPTX::SUST_P_1D_B8_TRAP_I;746case NVPTX::SUST_P_1D_B16_TRAP_R:747return NVPTX::SUST_P_1D_B16_TRAP_I;748case NVPTX::SUST_P_1D_B32_TRAP_R:749return NVPTX::SUST_P_1D_B32_TRAP_I;750case NVPTX::SUST_P_1D_V2B8_TRAP_R:751return NVPTX::SUST_P_1D_V2B8_TRAP_I;752case NVPTX::SUST_P_1D_V2B16_TRAP_R:753return NVPTX::SUST_P_1D_V2B16_TRAP_I;754case NVPTX::SUST_P_1D_V2B32_TRAP_R:755return NVPTX::SUST_P_1D_V2B32_TRAP_I;756case NVPTX::SUST_P_1D_V4B8_TRAP_R:757return NVPTX::SUST_P_1D_V4B8_TRAP_I;758case NVPTX::SUST_P_1D_V4B16_TRAP_R:759return NVPTX::SUST_P_1D_V4B16_TRAP_I;760case NVPTX::SUST_P_1D_V4B32_TRAP_R:761return NVPTX::SUST_P_1D_V4B32_TRAP_I;762case NVPTX::SUST_P_1D_ARRAY_B8_TRAP_R:763return NVPTX::SUST_P_1D_ARRAY_B8_TRAP_I;764case NVPTX::SUST_P_1D_ARRAY_B16_TRAP_R:765return NVPTX::SUST_P_1D_ARRAY_B16_TRAP_I;766case NVPTX::SUST_P_1D_ARRAY_B32_TRAP_R:767return NVPTX::SUST_P_1D_ARRAY_B32_TRAP_I;768case NVPTX::SUST_P_1D_ARRAY_V2B8_TRAP_R:769return NVPTX::SUST_P_1D_ARRAY_V2B8_TRAP_I;770case NVPTX::SUST_P_1D_ARRAY_V2B16_TRAP_R:771return NVPTX::SUST_P_1D_ARRAY_V2B16_TRAP_I;772case NVPTX::SUST_P_1D_ARRAY_V2B32_TRAP_R:773return NVPTX::SUST_P_1D_ARRAY_V2B32_TRAP_I;774case NVPTX::SUST_P_1D_ARRAY_V4B8_TRAP_R:775return NVPTX::SUST_P_1D_ARRAY_V4B8_TRAP_I;776case NVPTX::SUST_P_1D_ARRAY_V4B16_TRAP_R:777return NVPTX::SUST_P_1D_ARRAY_V4B16_TRAP_I;778case NVPTX::SUST_P_1D_ARRAY_V4B32_TRAP_R:779return NVPTX::SUST_P_1D_ARRAY_V4B32_TRAP_I;780case NVPTX::SUST_P_2D_B8_TRAP_R:781return NVPTX::SUST_P_2D_B8_TRAP_I;782case NVPTX::SUST_P_2D_B16_TRAP_R:783return NVPTX::SUST_P_2D_B16_TRAP_I;784case NVPTX::SUST_P_2D_B32_TRAP_R:785return NVPTX::SUST_P_2D_B32_TRAP_I;786case NVPTX::SUST_P_2D_V2B8_TRAP_R:787return NVPTX::SUST_P_2D_V2B8_TRAP_I;788case NVPTX::SUST_P_2D_V2B16_TRAP_R:789return NVPTX::SUST_P_2D_V2B16_TRAP_I;790case NVPTX::SUST_P_2D_V2B32_TRAP_R:791return NVPTX::SUST_P_2D_V2B32_TRAP_I;792case NVPTX::SUST_P_2D_V4B8_TRAP_R:793return NVPTX::SUST_P_2D_V4B8_TRAP_I;794case NVPTX::SUST_P_2D_V4B16_TRAP_R:795return NVPTX::SUST_P_2D_V4B16_TRAP_I;796case NVPTX::SUST_P_2D_V4B32_TRAP_R:797return NVPTX::SUST_P_2D_V4B32_TRAP_I;798case NVPTX::SUST_P_2D_ARRAY_B8_TRAP_R:799return NVPTX::SUST_P_2D_ARRAY_B8_TRAP_I;800case NVPTX::SUST_P_2D_ARRAY_B16_TRAP_R:801return NVPTX::SUST_P_2D_ARRAY_B16_TRAP_I;802case NVPTX::SUST_P_2D_ARRAY_B32_TRAP_R:803return NVPTX::SUST_P_2D_ARRAY_B32_TRAP_I;804case NVPTX::SUST_P_2D_ARRAY_V2B8_TRAP_R:805return NVPTX::SUST_P_2D_ARRAY_V2B8_TRAP_I;806case NVPTX::SUST_P_2D_ARRAY_V2B16_TRAP_R:807return NVPTX::SUST_P_2D_ARRAY_V2B16_TRAP_I;808case NVPTX::SUST_P_2D_ARRAY_V2B32_TRAP_R:809return NVPTX::SUST_P_2D_ARRAY_V2B32_TRAP_I;810case NVPTX::SUST_P_2D_ARRAY_V4B8_TRAP_R:811return NVPTX::SUST_P_2D_ARRAY_V4B8_TRAP_I;812case NVPTX::SUST_P_2D_ARRAY_V4B16_TRAP_R:813return NVPTX::SUST_P_2D_ARRAY_V4B16_TRAP_I;814case NVPTX::SUST_P_2D_ARRAY_V4B32_TRAP_R:815return NVPTX::SUST_P_2D_ARRAY_V4B32_TRAP_I;816case NVPTX::SUST_P_3D_B8_TRAP_R:817return NVPTX::SUST_P_3D_B8_TRAP_I;818case NVPTX::SUST_P_3D_B16_TRAP_R:819return NVPTX::SUST_P_3D_B16_TRAP_I;820case NVPTX::SUST_P_3D_B32_TRAP_R:821return NVPTX::SUST_P_3D_B32_TRAP_I;822case NVPTX::SUST_P_3D_V2B8_TRAP_R:823return NVPTX::SUST_P_3D_V2B8_TRAP_I;824case NVPTX::SUST_P_3D_V2B16_TRAP_R:825return NVPTX::SUST_P_3D_V2B16_TRAP_I;826case NVPTX::SUST_P_3D_V2B32_TRAP_R:827return NVPTX::SUST_P_3D_V2B32_TRAP_I;828case NVPTX::SUST_P_3D_V4B8_TRAP_R:829return NVPTX::SUST_P_3D_V4B8_TRAP_I;830case NVPTX::SUST_P_3D_V4B16_TRAP_R:831return NVPTX::SUST_P_3D_V4B16_TRAP_I;832case NVPTX::SUST_P_3D_V4B32_TRAP_R:833return NVPTX::SUST_P_3D_V4B32_TRAP_I;834default:835llvm_unreachable("Unhandled SUST opcode");836}837}838839static unsigned texRegisterToIndexOpcode(unsigned RegOC) {840switch (RegOC) {841case NVPTX::TEX_1D_F32_S32_RR:842return NVPTX::TEX_1D_F32_S32_IR;843case NVPTX::TEX_1D_F32_S32_RI:844return NVPTX::TEX_1D_F32_S32_II;845case NVPTX::TEX_1D_F32_F32_RR:846return NVPTX::TEX_1D_F32_F32_IR;847case NVPTX::TEX_1D_F32_F32_RI:848return NVPTX::TEX_1D_F32_F32_II;849case NVPTX::TEX_1D_F32_F32_LEVEL_RR:850return NVPTX::TEX_1D_F32_F32_LEVEL_IR;851case NVPTX::TEX_1D_F32_F32_LEVEL_RI:852return NVPTX::TEX_1D_F32_F32_LEVEL_II;853case NVPTX::TEX_1D_F32_F32_GRAD_RR:854return NVPTX::TEX_1D_F32_F32_GRAD_IR;855case NVPTX::TEX_1D_F32_F32_GRAD_RI:856return NVPTX::TEX_1D_F32_F32_GRAD_II;857case NVPTX::TEX_1D_S32_S32_RR:858return NVPTX::TEX_1D_S32_S32_IR;859case NVPTX::TEX_1D_S32_S32_RI:860return NVPTX::TEX_1D_S32_S32_II;861case NVPTX::TEX_1D_S32_F32_RR:862return NVPTX::TEX_1D_S32_F32_IR;863case NVPTX::TEX_1D_S32_F32_RI:864return NVPTX::TEX_1D_S32_F32_II;865case NVPTX::TEX_1D_S32_F32_LEVEL_RR:866return NVPTX::TEX_1D_S32_F32_LEVEL_IR;867case NVPTX::TEX_1D_S32_F32_LEVEL_RI:868return NVPTX::TEX_1D_S32_F32_LEVEL_II;869case NVPTX::TEX_1D_S32_F32_GRAD_RR:870return NVPTX::TEX_1D_S32_F32_GRAD_IR;871case NVPTX::TEX_1D_S32_F32_GRAD_RI:872return NVPTX::TEX_1D_S32_F32_GRAD_II;873case NVPTX::TEX_1D_U32_S32_RR:874return NVPTX::TEX_1D_U32_S32_IR;875case NVPTX::TEX_1D_U32_S32_RI:876return NVPTX::TEX_1D_U32_S32_II;877case NVPTX::TEX_1D_U32_F32_RR:878return NVPTX::TEX_1D_U32_F32_IR;879case NVPTX::TEX_1D_U32_F32_RI:880return NVPTX::TEX_1D_U32_F32_II;881case NVPTX::TEX_1D_U32_F32_LEVEL_RR:882return NVPTX::TEX_1D_U32_F32_LEVEL_IR;883case NVPTX::TEX_1D_U32_F32_LEVEL_RI:884return NVPTX::TEX_1D_U32_F32_LEVEL_II;885case NVPTX::TEX_1D_U32_F32_GRAD_RR:886return NVPTX::TEX_1D_U32_F32_GRAD_IR;887case NVPTX::TEX_1D_U32_F32_GRAD_RI:888return NVPTX::TEX_1D_U32_F32_GRAD_II;889case NVPTX::TEX_1D_ARRAY_F32_S32_RR:890return NVPTX::TEX_1D_ARRAY_F32_S32_IR;891case NVPTX::TEX_1D_ARRAY_F32_S32_RI:892return NVPTX::TEX_1D_ARRAY_F32_S32_II;893case NVPTX::TEX_1D_ARRAY_F32_F32_RR:894return NVPTX::TEX_1D_ARRAY_F32_F32_IR;895case NVPTX::TEX_1D_ARRAY_F32_F32_RI:896return NVPTX::TEX_1D_ARRAY_F32_F32_II;897case NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_RR:898return NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_IR;899case NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_RI:900return NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_II;901case NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_RR:902return NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_IR;903case NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_RI:904return NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_II;905case NVPTX::TEX_1D_ARRAY_S32_S32_RR:906return NVPTX::TEX_1D_ARRAY_S32_S32_IR;907case NVPTX::TEX_1D_ARRAY_S32_S32_RI:908return NVPTX::TEX_1D_ARRAY_S32_S32_II;909case NVPTX::TEX_1D_ARRAY_S32_F32_RR:910return NVPTX::TEX_1D_ARRAY_S32_F32_IR;911case NVPTX::TEX_1D_ARRAY_S32_F32_RI:912return NVPTX::TEX_1D_ARRAY_S32_F32_II;913case NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_RR:914return NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_IR;915case NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_RI:916return NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_II;917case NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_RR:918return NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_IR;919case NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_RI:920return NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_II;921case NVPTX::TEX_1D_ARRAY_U32_S32_RR:922return NVPTX::TEX_1D_ARRAY_U32_S32_IR;923case NVPTX::TEX_1D_ARRAY_U32_S32_RI:924return NVPTX::TEX_1D_ARRAY_U32_S32_II;925case NVPTX::TEX_1D_ARRAY_U32_F32_RR:926return NVPTX::TEX_1D_ARRAY_U32_F32_IR;927case NVPTX::TEX_1D_ARRAY_U32_F32_RI:928return NVPTX::TEX_1D_ARRAY_U32_F32_II;929case NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_RR:930return NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_IR;931case NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_RI:932return NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_II;933case NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_RR:934return NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_IR;935case NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_RI:936return NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_II;937case NVPTX::TEX_2D_F32_S32_RR:938return NVPTX::TEX_2D_F32_S32_IR;939case NVPTX::TEX_2D_F32_S32_RI:940return NVPTX::TEX_2D_F32_S32_II;941case NVPTX::TEX_2D_F32_F32_RR:942return NVPTX::TEX_2D_F32_F32_IR;943case NVPTX::TEX_2D_F32_F32_RI:944return NVPTX::TEX_2D_F32_F32_II;945case NVPTX::TEX_2D_F32_F32_LEVEL_RR:946return NVPTX::TEX_2D_F32_F32_LEVEL_IR;947case NVPTX::TEX_2D_F32_F32_LEVEL_RI:948return NVPTX::TEX_2D_F32_F32_LEVEL_II;949case NVPTX::TEX_2D_F32_F32_GRAD_RR:950return NVPTX::TEX_2D_F32_F32_GRAD_IR;951case NVPTX::TEX_2D_F32_F32_GRAD_RI:952return NVPTX::TEX_2D_F32_F32_GRAD_II;953case NVPTX::TEX_2D_S32_S32_RR:954return NVPTX::TEX_2D_S32_S32_IR;955case NVPTX::TEX_2D_S32_S32_RI:956return NVPTX::TEX_2D_S32_S32_II;957case NVPTX::TEX_2D_S32_F32_RR:958return NVPTX::TEX_2D_S32_F32_IR;959case NVPTX::TEX_2D_S32_F32_RI:960return NVPTX::TEX_2D_S32_F32_II;961case NVPTX::TEX_2D_S32_F32_LEVEL_RR:962return NVPTX::TEX_2D_S32_F32_LEVEL_IR;963case NVPTX::TEX_2D_S32_F32_LEVEL_RI:964return NVPTX::TEX_2D_S32_F32_LEVEL_II;965case NVPTX::TEX_2D_S32_F32_GRAD_RR:966return NVPTX::TEX_2D_S32_F32_GRAD_IR;967case NVPTX::TEX_2D_S32_F32_GRAD_RI:968return NVPTX::TEX_2D_S32_F32_GRAD_II;969case NVPTX::TEX_2D_U32_S32_RR:970return NVPTX::TEX_2D_U32_S32_IR;971case NVPTX::TEX_2D_U32_S32_RI:972return NVPTX::TEX_2D_U32_S32_II;973case NVPTX::TEX_2D_U32_F32_RR:974return NVPTX::TEX_2D_U32_F32_IR;975case NVPTX::TEX_2D_U32_F32_RI:976return NVPTX::TEX_2D_U32_F32_II;977case NVPTX::TEX_2D_U32_F32_LEVEL_RR:978return NVPTX::TEX_2D_U32_F32_LEVEL_IR;979case NVPTX::TEX_2D_U32_F32_LEVEL_RI:980return NVPTX::TEX_2D_U32_F32_LEVEL_II;981case NVPTX::TEX_2D_U32_F32_GRAD_RR:982return NVPTX::TEX_2D_U32_F32_GRAD_IR;983case NVPTX::TEX_2D_U32_F32_GRAD_RI:984return NVPTX::TEX_2D_U32_F32_GRAD_II;985case NVPTX::TEX_2D_ARRAY_F32_S32_RR:986return NVPTX::TEX_2D_ARRAY_F32_S32_IR;987case NVPTX::TEX_2D_ARRAY_F32_S32_RI:988return NVPTX::TEX_2D_ARRAY_F32_S32_II;989case NVPTX::TEX_2D_ARRAY_F32_F32_RR:990return NVPTX::TEX_2D_ARRAY_F32_F32_IR;991case NVPTX::TEX_2D_ARRAY_F32_F32_RI:992return NVPTX::TEX_2D_ARRAY_F32_F32_II;993case NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_RR:994return NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_IR;995case NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_RI:996return NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_II;997case NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_RR:998return NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_IR;999case NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_RI:1000return NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_II;1001case NVPTX::TEX_2D_ARRAY_S32_S32_RR:1002return NVPTX::TEX_2D_ARRAY_S32_S32_IR;1003case NVPTX::TEX_2D_ARRAY_S32_S32_RI:1004return NVPTX::TEX_2D_ARRAY_S32_S32_II;1005case NVPTX::TEX_2D_ARRAY_S32_F32_RR:1006return NVPTX::TEX_2D_ARRAY_S32_F32_IR;1007case NVPTX::TEX_2D_ARRAY_S32_F32_RI:1008return NVPTX::TEX_2D_ARRAY_S32_F32_II;1009case NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_RR:1010return NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_IR;1011case NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_RI:1012return NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_II;1013case NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_RR:1014return NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_IR;1015case NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_RI:1016return NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_II;1017case NVPTX::TEX_2D_ARRAY_U32_S32_RR:1018return NVPTX::TEX_2D_ARRAY_U32_S32_IR;1019case NVPTX::TEX_2D_ARRAY_U32_S32_RI:1020return NVPTX::TEX_2D_ARRAY_U32_S32_II;1021case NVPTX::TEX_2D_ARRAY_U32_F32_RR:1022return NVPTX::TEX_2D_ARRAY_U32_F32_IR;1023case NVPTX::TEX_2D_ARRAY_U32_F32_RI:1024return NVPTX::TEX_2D_ARRAY_U32_F32_II;1025case NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_RR:1026return NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_IR;1027case NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_RI:1028return NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_II;1029case NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_RR:1030return NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_IR;1031case NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_RI:1032return NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_II;1033case NVPTX::TEX_3D_F32_S32_RR:1034return NVPTX::TEX_3D_F32_S32_IR;1035case NVPTX::TEX_3D_F32_S32_RI:1036return NVPTX::TEX_3D_F32_S32_II;1037case NVPTX::TEX_3D_F32_F32_RR:1038return NVPTX::TEX_3D_F32_F32_IR;1039case NVPTX::TEX_3D_F32_F32_RI:1040return NVPTX::TEX_3D_F32_F32_II;1041case NVPTX::TEX_3D_F32_F32_LEVEL_RR:1042return NVPTX::TEX_3D_F32_F32_LEVEL_IR;1043case NVPTX::TEX_3D_F32_F32_LEVEL_RI:1044return NVPTX::TEX_3D_F32_F32_LEVEL_II;1045case NVPTX::TEX_3D_F32_F32_GRAD_RR:1046return NVPTX::TEX_3D_F32_F32_GRAD_IR;1047case NVPTX::TEX_3D_F32_F32_GRAD_RI:1048return NVPTX::TEX_3D_F32_F32_GRAD_II;1049case NVPTX::TEX_3D_S32_S32_RR:1050return NVPTX::TEX_3D_S32_S32_IR;1051case NVPTX::TEX_3D_S32_S32_RI:1052return NVPTX::TEX_3D_S32_S32_II;1053case NVPTX::TEX_3D_S32_F32_RR:1054return NVPTX::TEX_3D_S32_F32_IR;1055case NVPTX::TEX_3D_S32_F32_RI:1056return NVPTX::TEX_3D_S32_F32_II;1057case NVPTX::TEX_3D_S32_F32_LEVEL_RR:1058return NVPTX::TEX_3D_S32_F32_LEVEL_IR;1059case NVPTX::TEX_3D_S32_F32_LEVEL_RI:1060return NVPTX::TEX_3D_S32_F32_LEVEL_II;1061case NVPTX::TEX_3D_S32_F32_GRAD_RR:1062return NVPTX::TEX_3D_S32_F32_GRAD_IR;1063case NVPTX::TEX_3D_S32_F32_GRAD_RI:1064return NVPTX::TEX_3D_S32_F32_GRAD_II;1065case NVPTX::TEX_3D_U32_S32_RR:1066return NVPTX::TEX_3D_U32_S32_IR;1067case NVPTX::TEX_3D_U32_S32_RI:1068return NVPTX::TEX_3D_U32_S32_II;1069case NVPTX::TEX_3D_U32_F32_RR:1070return NVPTX::TEX_3D_U32_F32_IR;1071case NVPTX::TEX_3D_U32_F32_RI:1072return NVPTX::TEX_3D_U32_F32_II;1073case NVPTX::TEX_3D_U32_F32_LEVEL_RR:1074return NVPTX::TEX_3D_U32_F32_LEVEL_IR;1075case NVPTX::TEX_3D_U32_F32_LEVEL_RI:1076return NVPTX::TEX_3D_U32_F32_LEVEL_II;1077case NVPTX::TEX_3D_U32_F32_GRAD_RR:1078return NVPTX::TEX_3D_U32_F32_GRAD_IR;1079case NVPTX::TEX_3D_U32_F32_GRAD_RI:1080return NVPTX::TEX_3D_U32_F32_GRAD_II;1081case NVPTX::TEX_CUBE_F32_F32_RR:1082return NVPTX::TEX_CUBE_F32_F32_IR;1083case NVPTX::TEX_CUBE_F32_F32_RI:1084return NVPTX::TEX_CUBE_F32_F32_II;1085case NVPTX::TEX_CUBE_F32_F32_LEVEL_RR:1086return NVPTX::TEX_CUBE_F32_F32_LEVEL_IR;1087case NVPTX::TEX_CUBE_F32_F32_LEVEL_RI:1088return NVPTX::TEX_CUBE_F32_F32_LEVEL_II;1089case NVPTX::TEX_CUBE_S32_F32_RR:1090return NVPTX::TEX_CUBE_S32_F32_IR;1091case NVPTX::TEX_CUBE_S32_F32_RI:1092return NVPTX::TEX_CUBE_S32_F32_II;1093case NVPTX::TEX_CUBE_S32_F32_LEVEL_RR:1094return NVPTX::TEX_CUBE_S32_F32_LEVEL_IR;1095case NVPTX::TEX_CUBE_S32_F32_LEVEL_RI:1096return NVPTX::TEX_CUBE_S32_F32_LEVEL_II;1097case NVPTX::TEX_CUBE_U32_F32_RR:1098return NVPTX::TEX_CUBE_U32_F32_IR;1099case NVPTX::TEX_CUBE_U32_F32_RI:1100return NVPTX::TEX_CUBE_U32_F32_II;1101case NVPTX::TEX_CUBE_U32_F32_LEVEL_RR:1102return NVPTX::TEX_CUBE_U32_F32_LEVEL_IR;1103case NVPTX::TEX_CUBE_U32_F32_LEVEL_RI:1104return NVPTX::TEX_CUBE_U32_F32_LEVEL_II;1105case NVPTX::TEX_CUBE_ARRAY_F32_F32_RR:1106return NVPTX::TEX_CUBE_ARRAY_F32_F32_IR;1107case NVPTX::TEX_CUBE_ARRAY_F32_F32_RI:1108return NVPTX::TEX_CUBE_ARRAY_F32_F32_II;1109case NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_RR:1110return NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_IR;1111case NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_RI:1112return NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_II;1113case NVPTX::TEX_CUBE_ARRAY_S32_F32_RR:1114return NVPTX::TEX_CUBE_ARRAY_S32_F32_IR;1115case NVPTX::TEX_CUBE_ARRAY_S32_F32_RI:1116return NVPTX::TEX_CUBE_ARRAY_S32_F32_II;1117case NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_RR:1118return NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_IR;1119case NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_RI:1120return NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_II;1121case NVPTX::TEX_CUBE_ARRAY_U32_F32_RR:1122return NVPTX::TEX_CUBE_ARRAY_U32_F32_IR;1123case NVPTX::TEX_CUBE_ARRAY_U32_F32_RI:1124return NVPTX::TEX_CUBE_ARRAY_U32_F32_II;1125case NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_RR:1126return NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_IR;1127case NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_RI:1128return NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_II;1129case NVPTX::TLD4_R_2D_F32_F32_RR:1130return NVPTX::TLD4_R_2D_F32_F32_IR;1131case NVPTX::TLD4_R_2D_F32_F32_RI:1132return NVPTX::TLD4_R_2D_F32_F32_II;1133case NVPTX::TLD4_G_2D_F32_F32_RR:1134return NVPTX::TLD4_G_2D_F32_F32_IR;1135case NVPTX::TLD4_G_2D_F32_F32_RI:1136return NVPTX::TLD4_G_2D_F32_F32_II;1137case NVPTX::TLD4_B_2D_F32_F32_RR:1138return NVPTX::TLD4_B_2D_F32_F32_IR;1139case NVPTX::TLD4_B_2D_F32_F32_RI:1140return NVPTX::TLD4_B_2D_F32_F32_II;1141case NVPTX::TLD4_A_2D_F32_F32_RR:1142return NVPTX::TLD4_A_2D_F32_F32_IR;1143case NVPTX::TLD4_A_2D_F32_F32_RI:1144return NVPTX::TLD4_A_2D_F32_F32_II;1145case NVPTX::TLD4_R_2D_S32_F32_RR:1146return NVPTX::TLD4_R_2D_S32_F32_IR;1147case NVPTX::TLD4_R_2D_S32_F32_RI:1148return NVPTX::TLD4_R_2D_S32_F32_II;1149case NVPTX::TLD4_G_2D_S32_F32_RR:1150return NVPTX::TLD4_G_2D_S32_F32_IR;1151case NVPTX::TLD4_G_2D_S32_F32_RI:1152return NVPTX::TLD4_G_2D_S32_F32_II;1153case NVPTX::TLD4_B_2D_S32_F32_RR:1154return NVPTX::TLD4_B_2D_S32_F32_IR;1155case NVPTX::TLD4_B_2D_S32_F32_RI:1156return NVPTX::TLD4_B_2D_S32_F32_II;1157case NVPTX::TLD4_A_2D_S32_F32_RR:1158return NVPTX::TLD4_A_2D_S32_F32_IR;1159case NVPTX::TLD4_A_2D_S32_F32_RI:1160return NVPTX::TLD4_A_2D_S32_F32_II;1161case NVPTX::TLD4_R_2D_U32_F32_RR:1162return NVPTX::TLD4_R_2D_U32_F32_IR;1163case NVPTX::TLD4_R_2D_U32_F32_RI:1164return NVPTX::TLD4_R_2D_U32_F32_II;1165case NVPTX::TLD4_G_2D_U32_F32_RR:1166return NVPTX::TLD4_G_2D_U32_F32_IR;1167case NVPTX::TLD4_G_2D_U32_F32_RI:1168return NVPTX::TLD4_G_2D_U32_F32_II;1169case NVPTX::TLD4_B_2D_U32_F32_RR:1170return NVPTX::TLD4_B_2D_U32_F32_IR;1171case NVPTX::TLD4_B_2D_U32_F32_RI:1172return NVPTX::TLD4_B_2D_U32_F32_II;1173case NVPTX::TLD4_A_2D_U32_F32_RR:1174return NVPTX::TLD4_A_2D_U32_F32_IR;1175case NVPTX::TLD4_A_2D_U32_F32_RI:1176return NVPTX::TLD4_A_2D_U32_F32_II;1177case NVPTX::TEX_UNIFIED_1D_F32_S32_R:1178return NVPTX::TEX_UNIFIED_1D_F32_S32_I;1179case NVPTX::TEX_UNIFIED_1D_F32_F32_R:1180return NVPTX::TEX_UNIFIED_1D_F32_F32_I;1181case NVPTX::TEX_UNIFIED_1D_F32_F32_LEVEL_R:1182return NVPTX::TEX_UNIFIED_1D_F32_F32_LEVEL_I;1183case NVPTX::TEX_UNIFIED_1D_F32_F32_GRAD_R:1184return NVPTX::TEX_UNIFIED_1D_F32_F32_GRAD_I;1185case NVPTX::TEX_UNIFIED_1D_S32_S32_R:1186return NVPTX::TEX_UNIFIED_1D_S32_S32_I;1187case NVPTX::TEX_UNIFIED_1D_S32_F32_R:1188return NVPTX::TEX_UNIFIED_1D_S32_F32_I;1189case NVPTX::TEX_UNIFIED_1D_S32_F32_LEVEL_R:1190return NVPTX::TEX_UNIFIED_1D_S32_F32_LEVEL_I;1191case NVPTX::TEX_UNIFIED_1D_S32_F32_GRAD_R:1192return NVPTX::TEX_UNIFIED_1D_S32_F32_GRAD_I;1193case NVPTX::TEX_UNIFIED_1D_U32_S32_R:1194return NVPTX::TEX_UNIFIED_1D_U32_S32_I;1195case NVPTX::TEX_UNIFIED_1D_U32_F32_R:1196return NVPTX::TEX_UNIFIED_1D_U32_F32_I;1197case NVPTX::TEX_UNIFIED_1D_U32_F32_LEVEL_R:1198return NVPTX::TEX_UNIFIED_1D_U32_F32_LEVEL_I;1199case NVPTX::TEX_UNIFIED_1D_U32_F32_GRAD_R:1200return NVPTX::TEX_UNIFIED_1D_U32_F32_GRAD_I;1201case NVPTX::TEX_UNIFIED_1D_ARRAY_F32_S32_R:1202return NVPTX::TEX_UNIFIED_1D_ARRAY_F32_S32_I;1203case NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_R:1204return NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_I;1205case NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_LEVEL_R:1206return NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_LEVEL_I;1207case NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_GRAD_R:1208return NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_GRAD_I;1209case NVPTX::TEX_UNIFIED_1D_ARRAY_S32_S32_R:1210return NVPTX::TEX_UNIFIED_1D_ARRAY_S32_S32_I;1211case NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_R:1212return NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_I;1213case NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_LEVEL_R:1214return NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_LEVEL_I;1215case NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_GRAD_R:1216return NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_GRAD_I;1217case NVPTX::TEX_UNIFIED_1D_ARRAY_U32_S32_R:1218return NVPTX::TEX_UNIFIED_1D_ARRAY_U32_S32_I;1219case NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_R:1220return NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_I;1221case NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_LEVEL_R:1222return NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_LEVEL_I;1223case NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_GRAD_R:1224return NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_GRAD_I;1225case NVPTX::TEX_UNIFIED_2D_F32_S32_R:1226return NVPTX::TEX_UNIFIED_2D_F32_S32_I;1227case NVPTX::TEX_UNIFIED_2D_F32_F32_R:1228return NVPTX::TEX_UNIFIED_2D_F32_F32_I;1229case NVPTX::TEX_UNIFIED_2D_F32_F32_LEVEL_R:1230return NVPTX::TEX_UNIFIED_2D_F32_F32_LEVEL_I;1231case NVPTX::TEX_UNIFIED_2D_F32_F32_GRAD_R:1232return NVPTX::TEX_UNIFIED_2D_F32_F32_GRAD_I;1233case NVPTX::TEX_UNIFIED_2D_S32_S32_R:1234return NVPTX::TEX_UNIFIED_2D_S32_S32_I;1235case NVPTX::TEX_UNIFIED_2D_S32_F32_R:1236return NVPTX::TEX_UNIFIED_2D_S32_F32_I;1237case NVPTX::TEX_UNIFIED_2D_S32_F32_LEVEL_R:1238return NVPTX::TEX_UNIFIED_2D_S32_F32_LEVEL_I;1239case NVPTX::TEX_UNIFIED_2D_S32_F32_GRAD_R:1240return NVPTX::TEX_UNIFIED_2D_S32_F32_GRAD_I;1241case NVPTX::TEX_UNIFIED_2D_U32_S32_R:1242return NVPTX::TEX_UNIFIED_2D_U32_S32_I;1243case NVPTX::TEX_UNIFIED_2D_U32_F32_R:1244return NVPTX::TEX_UNIFIED_2D_U32_F32_I;1245case NVPTX::TEX_UNIFIED_2D_U32_F32_LEVEL_R:1246return NVPTX::TEX_UNIFIED_2D_U32_F32_LEVEL_I;1247case NVPTX::TEX_UNIFIED_2D_U32_F32_GRAD_R:1248return NVPTX::TEX_UNIFIED_2D_U32_F32_GRAD_I;1249case NVPTX::TEX_UNIFIED_2D_ARRAY_F32_S32_R:1250return NVPTX::TEX_UNIFIED_2D_ARRAY_F32_S32_I;1251case NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_R:1252return NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_I;1253case NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_LEVEL_R:1254return NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_LEVEL_I;1255case NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_GRAD_R:1256return NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_GRAD_I;1257case NVPTX::TEX_UNIFIED_2D_ARRAY_S32_S32_R:1258return NVPTX::TEX_UNIFIED_2D_ARRAY_S32_S32_I;1259case NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_R:1260return NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_I;1261case NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_LEVEL_R:1262return NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_LEVEL_I;1263case NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_GRAD_R:1264return NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_GRAD_I;1265case NVPTX::TEX_UNIFIED_2D_ARRAY_U32_S32_R:1266return NVPTX::TEX_UNIFIED_2D_ARRAY_U32_S32_I;1267case NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_R:1268return NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_I;1269case NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_LEVEL_R:1270return NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_LEVEL_I;1271case NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_GRAD_R:1272return NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_GRAD_I;1273case NVPTX::TEX_UNIFIED_3D_F32_S32_R:1274return NVPTX::TEX_UNIFIED_3D_F32_S32_I;1275case NVPTX::TEX_UNIFIED_3D_F32_F32_R:1276return NVPTX::TEX_UNIFIED_3D_F32_F32_I;1277case NVPTX::TEX_UNIFIED_3D_F32_F32_LEVEL_R:1278return NVPTX::TEX_UNIFIED_3D_F32_F32_LEVEL_I;1279case NVPTX::TEX_UNIFIED_3D_F32_F32_GRAD_R:1280return NVPTX::TEX_UNIFIED_3D_F32_F32_GRAD_I;1281case NVPTX::TEX_UNIFIED_3D_S32_S32_R:1282return NVPTX::TEX_UNIFIED_3D_S32_S32_I;1283case NVPTX::TEX_UNIFIED_3D_S32_F32_R:1284return NVPTX::TEX_UNIFIED_3D_S32_F32_I;1285case NVPTX::TEX_UNIFIED_3D_S32_F32_LEVEL_R:1286return NVPTX::TEX_UNIFIED_3D_S32_F32_LEVEL_I;1287case NVPTX::TEX_UNIFIED_3D_S32_F32_GRAD_R:1288return NVPTX::TEX_UNIFIED_3D_S32_F32_GRAD_I;1289case NVPTX::TEX_UNIFIED_3D_U32_S32_R:1290return NVPTX::TEX_UNIFIED_3D_U32_S32_I;1291case NVPTX::TEX_UNIFIED_3D_U32_F32_R:1292return NVPTX::TEX_UNIFIED_3D_U32_F32_I;1293case NVPTX::TEX_UNIFIED_3D_U32_F32_LEVEL_R:1294return NVPTX::TEX_UNIFIED_3D_U32_F32_LEVEL_I;1295case NVPTX::TEX_UNIFIED_3D_U32_F32_GRAD_R:1296return NVPTX::TEX_UNIFIED_3D_U32_F32_GRAD_I;1297case NVPTX::TEX_UNIFIED_CUBE_F32_F32_R:1298return NVPTX::TEX_UNIFIED_CUBE_F32_F32_I;1299case NVPTX::TEX_UNIFIED_CUBE_F32_F32_LEVEL_R:1300return NVPTX::TEX_UNIFIED_CUBE_F32_F32_LEVEL_I;1301case NVPTX::TEX_UNIFIED_CUBE_S32_F32_R:1302return NVPTX::TEX_UNIFIED_CUBE_S32_F32_I;1303case NVPTX::TEX_UNIFIED_CUBE_S32_F32_LEVEL_R:1304return NVPTX::TEX_UNIFIED_CUBE_S32_F32_LEVEL_I;1305case NVPTX::TEX_UNIFIED_CUBE_U32_F32_R:1306return NVPTX::TEX_UNIFIED_CUBE_U32_F32_I;1307case NVPTX::TEX_UNIFIED_CUBE_U32_F32_LEVEL_R:1308return NVPTX::TEX_UNIFIED_CUBE_U32_F32_LEVEL_I;1309case NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_R:1310return NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_I;1311case NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_LEVEL_R:1312return NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_LEVEL_I;1313case NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_R:1314return NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_I;1315case NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_LEVEL_R:1316return NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_LEVEL_I;1317case NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_R:1318return NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_I;1319case NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_LEVEL_R:1320return NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_LEVEL_I;1321case NVPTX::TEX_UNIFIED_CUBE_F32_F32_GRAD_R:1322return NVPTX::TEX_UNIFIED_CUBE_F32_F32_GRAD_I;1323case NVPTX::TEX_UNIFIED_CUBE_S32_F32_GRAD_R:1324return NVPTX::TEX_UNIFIED_CUBE_S32_F32_GRAD_I;1325case NVPTX::TEX_UNIFIED_CUBE_U32_F32_GRAD_R:1326return NVPTX::TEX_UNIFIED_CUBE_U32_F32_GRAD_I;1327case NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_GRAD_R:1328return NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_GRAD_I;1329case NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_GRAD_R:1330return NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_GRAD_I;1331case NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_GRAD_R:1332return NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_GRAD_I;1333case NVPTX::TLD4_UNIFIED_R_2D_F32_F32_R:1334return NVPTX::TLD4_UNIFIED_R_2D_F32_F32_I;1335case NVPTX::TLD4_UNIFIED_G_2D_F32_F32_R:1336return NVPTX::TLD4_UNIFIED_G_2D_F32_F32_I;1337case NVPTX::TLD4_UNIFIED_B_2D_F32_F32_R:1338return NVPTX::TLD4_UNIFIED_B_2D_F32_F32_I;1339case NVPTX::TLD4_UNIFIED_A_2D_F32_F32_R:1340return NVPTX::TLD4_UNIFIED_A_2D_F32_F32_I;1341case NVPTX::TLD4_UNIFIED_R_2D_S32_F32_R:1342return NVPTX::TLD4_UNIFIED_R_2D_S32_F32_I;1343case NVPTX::TLD4_UNIFIED_G_2D_S32_F32_R:1344return NVPTX::TLD4_UNIFIED_G_2D_S32_F32_I;1345case NVPTX::TLD4_UNIFIED_B_2D_S32_F32_R:1346return NVPTX::TLD4_UNIFIED_B_2D_S32_F32_I;1347case NVPTX::TLD4_UNIFIED_A_2D_S32_F32_R:1348return NVPTX::TLD4_UNIFIED_A_2D_S32_F32_I;1349case NVPTX::TLD4_UNIFIED_R_2D_U32_F32_R:1350return NVPTX::TLD4_UNIFIED_R_2D_U32_F32_I;1351case NVPTX::TLD4_UNIFIED_G_2D_U32_F32_R:1352return NVPTX::TLD4_UNIFIED_G_2D_U32_F32_I;1353case NVPTX::TLD4_UNIFIED_B_2D_U32_F32_R:1354return NVPTX::TLD4_UNIFIED_B_2D_U32_F32_I;1355case NVPTX::TLD4_UNIFIED_A_2D_U32_F32_R:1356return NVPTX::TLD4_UNIFIED_A_2D_U32_F32_I;1357default:1358llvm_unreachable("Unhandled TEX opcode");1359};1360}13611362static unsigned samplerRegisterToIndexOpcode(unsigned RegOC) {1363switch (RegOC) {1364case NVPTX::TEX_1D_F32_S32_RR:1365return NVPTX::TEX_1D_F32_S32_RI;1366case NVPTX::TEX_1D_F32_S32_IR:1367return NVPTX::TEX_1D_F32_S32_II;1368case NVPTX::TEX_1D_F32_F32_RR:1369return NVPTX::TEX_1D_F32_F32_RI;1370case NVPTX::TEX_1D_F32_F32_IR:1371return NVPTX::TEX_1D_F32_F32_II;1372case NVPTX::TEX_1D_F32_F32_LEVEL_RR:1373return NVPTX::TEX_1D_F32_F32_LEVEL_RI;1374case NVPTX::TEX_1D_F32_F32_LEVEL_IR:1375return NVPTX::TEX_1D_F32_F32_LEVEL_II;1376case NVPTX::TEX_1D_F32_F32_GRAD_RR:1377return NVPTX::TEX_1D_F32_F32_GRAD_RI;1378case NVPTX::TEX_1D_F32_F32_GRAD_IR:1379return NVPTX::TEX_1D_F32_F32_GRAD_II;1380case NVPTX::TEX_1D_S32_S32_RR:1381return NVPTX::TEX_1D_S32_S32_RI;1382case NVPTX::TEX_1D_S32_S32_IR:1383return NVPTX::TEX_1D_S32_S32_II;1384case NVPTX::TEX_1D_S32_F32_RR:1385return NVPTX::TEX_1D_S32_F32_RI;1386case NVPTX::TEX_1D_S32_F32_IR:1387return NVPTX::TEX_1D_S32_F32_II;1388case NVPTX::TEX_1D_S32_F32_LEVEL_RR:1389return NVPTX::TEX_1D_S32_F32_LEVEL_RI;1390case NVPTX::TEX_1D_S32_F32_LEVEL_IR:1391return NVPTX::TEX_1D_S32_F32_LEVEL_II;1392case NVPTX::TEX_1D_S32_F32_GRAD_RR:1393return NVPTX::TEX_1D_S32_F32_GRAD_RI;1394case NVPTX::TEX_1D_S32_F32_GRAD_IR:1395return NVPTX::TEX_1D_S32_F32_GRAD_II;1396case NVPTX::TEX_1D_U32_S32_RR:1397return NVPTX::TEX_1D_U32_S32_RI;1398case NVPTX::TEX_1D_U32_S32_IR:1399return NVPTX::TEX_1D_U32_S32_II;1400case NVPTX::TEX_1D_U32_F32_RR:1401return NVPTX::TEX_1D_U32_F32_RI;1402case NVPTX::TEX_1D_U32_F32_IR:1403return NVPTX::TEX_1D_U32_F32_II;1404case NVPTX::TEX_1D_U32_F32_LEVEL_RR:1405return NVPTX::TEX_1D_U32_F32_LEVEL_RI;1406case NVPTX::TEX_1D_U32_F32_LEVEL_IR:1407return NVPTX::TEX_1D_U32_F32_LEVEL_II;1408case NVPTX::TEX_1D_U32_F32_GRAD_RR:1409return NVPTX::TEX_1D_U32_F32_GRAD_RI;1410case NVPTX::TEX_1D_U32_F32_GRAD_IR:1411return NVPTX::TEX_1D_U32_F32_GRAD_II;1412case NVPTX::TEX_1D_ARRAY_F32_S32_RR:1413return NVPTX::TEX_1D_ARRAY_F32_S32_RI;1414case NVPTX::TEX_1D_ARRAY_F32_S32_IR:1415return NVPTX::TEX_1D_ARRAY_F32_S32_II;1416case NVPTX::TEX_1D_ARRAY_F32_F32_RR:1417return NVPTX::TEX_1D_ARRAY_F32_F32_RI;1418case NVPTX::TEX_1D_ARRAY_F32_F32_IR:1419return NVPTX::TEX_1D_ARRAY_F32_F32_II;1420case NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_RR:1421return NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_RI;1422case NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_IR:1423return NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_II;1424case NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_RR:1425return NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_RI;1426case NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_IR:1427return NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_II;1428case NVPTX::TEX_1D_ARRAY_S32_S32_RR:1429return NVPTX::TEX_1D_ARRAY_S32_S32_RI;1430case NVPTX::TEX_1D_ARRAY_S32_S32_IR:1431return NVPTX::TEX_1D_ARRAY_S32_S32_II;1432case NVPTX::TEX_1D_ARRAY_S32_F32_RR:1433return NVPTX::TEX_1D_ARRAY_S32_F32_RI;1434case NVPTX::TEX_1D_ARRAY_S32_F32_IR:1435return NVPTX::TEX_1D_ARRAY_S32_F32_II;1436case NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_RR:1437return NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_RI;1438case NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_IR:1439return NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_II;1440case NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_RR:1441return NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_RI;1442case NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_IR:1443return NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_II;1444case NVPTX::TEX_1D_ARRAY_U32_S32_RR:1445return NVPTX::TEX_1D_ARRAY_U32_S32_RI;1446case NVPTX::TEX_1D_ARRAY_U32_S32_IR:1447return NVPTX::TEX_1D_ARRAY_U32_S32_II;1448case NVPTX::TEX_1D_ARRAY_U32_F32_RR:1449return NVPTX::TEX_1D_ARRAY_U32_F32_RI;1450case NVPTX::TEX_1D_ARRAY_U32_F32_IR:1451return NVPTX::TEX_1D_ARRAY_U32_F32_II;1452case NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_RR:1453return NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_RI;1454case NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_IR:1455return NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_II;1456case NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_RR:1457return NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_RI;1458case NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_IR:1459return NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_II;1460case NVPTX::TEX_2D_F32_S32_RR:1461return NVPTX::TEX_2D_F32_S32_RI;1462case NVPTX::TEX_2D_F32_S32_IR:1463return NVPTX::TEX_2D_F32_S32_II;1464case NVPTX::TEX_2D_F32_F32_RR:1465return NVPTX::TEX_2D_F32_F32_RI;1466case NVPTX::TEX_2D_F32_F32_IR:1467return NVPTX::TEX_2D_F32_F32_II;1468case NVPTX::TEX_2D_F32_F32_LEVEL_RR:1469return NVPTX::TEX_2D_F32_F32_LEVEL_RI;1470case NVPTX::TEX_2D_F32_F32_LEVEL_IR:1471return NVPTX::TEX_2D_F32_F32_LEVEL_II;1472case NVPTX::TEX_2D_F32_F32_GRAD_RR:1473return NVPTX::TEX_2D_F32_F32_GRAD_RI;1474case NVPTX::TEX_2D_F32_F32_GRAD_IR:1475return NVPTX::TEX_2D_F32_F32_GRAD_II;1476case NVPTX::TEX_2D_S32_S32_RR:1477return NVPTX::TEX_2D_S32_S32_RI;1478case NVPTX::TEX_2D_S32_S32_IR:1479return NVPTX::TEX_2D_S32_S32_II;1480case NVPTX::TEX_2D_S32_F32_RR:1481return NVPTX::TEX_2D_S32_F32_RI;1482case NVPTX::TEX_2D_S32_F32_IR:1483return NVPTX::TEX_2D_S32_F32_II;1484case NVPTX::TEX_2D_S32_F32_LEVEL_RR:1485return NVPTX::TEX_2D_S32_F32_LEVEL_RI;1486case NVPTX::TEX_2D_S32_F32_LEVEL_IR:1487return NVPTX::TEX_2D_S32_F32_LEVEL_II;1488case NVPTX::TEX_2D_S32_F32_GRAD_RR:1489return NVPTX::TEX_2D_S32_F32_GRAD_RI;1490case NVPTX::TEX_2D_S32_F32_GRAD_IR:1491return NVPTX::TEX_2D_S32_F32_GRAD_II;1492case NVPTX::TEX_2D_U32_S32_RR:1493return NVPTX::TEX_2D_U32_S32_RI;1494case NVPTX::TEX_2D_U32_S32_IR:1495return NVPTX::TEX_2D_U32_S32_II;1496case NVPTX::TEX_2D_U32_F32_RR:1497return NVPTX::TEX_2D_U32_F32_RI;1498case NVPTX::TEX_2D_U32_F32_IR:1499return NVPTX::TEX_2D_U32_F32_II;1500case NVPTX::TEX_2D_U32_F32_LEVEL_RR:1501return NVPTX::TEX_2D_U32_F32_LEVEL_RI;1502case NVPTX::TEX_2D_U32_F32_LEVEL_IR:1503return NVPTX::TEX_2D_U32_F32_LEVEL_II;1504case NVPTX::TEX_2D_U32_F32_GRAD_RR:1505return NVPTX::TEX_2D_U32_F32_GRAD_RI;1506case NVPTX::TEX_2D_U32_F32_GRAD_IR:1507return NVPTX::TEX_2D_U32_F32_GRAD_II;1508case NVPTX::TEX_2D_ARRAY_F32_S32_RR:1509return NVPTX::TEX_2D_ARRAY_F32_S32_RI;1510case NVPTX::TEX_2D_ARRAY_F32_S32_IR:1511return NVPTX::TEX_2D_ARRAY_F32_S32_II;1512case NVPTX::TEX_2D_ARRAY_F32_F32_RR:1513return NVPTX::TEX_2D_ARRAY_F32_F32_RI;1514case NVPTX::TEX_2D_ARRAY_F32_F32_IR:1515return NVPTX::TEX_2D_ARRAY_F32_F32_II;1516case NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_RR:1517return NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_RI;1518case NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_IR:1519return NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_II;1520case NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_RR:1521return NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_RI;1522case NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_IR:1523return NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_II;1524case NVPTX::TEX_2D_ARRAY_S32_S32_RR:1525return NVPTX::TEX_2D_ARRAY_S32_S32_RI;1526case NVPTX::TEX_2D_ARRAY_S32_S32_IR:1527return NVPTX::TEX_2D_ARRAY_S32_S32_II;1528case NVPTX::TEX_2D_ARRAY_S32_F32_RR:1529return NVPTX::TEX_2D_ARRAY_S32_F32_RI;1530case NVPTX::TEX_2D_ARRAY_S32_F32_IR:1531return NVPTX::TEX_2D_ARRAY_S32_F32_II;1532case NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_RR:1533return NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_RI;1534case NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_IR:1535return NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_II;1536case NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_RR:1537return NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_RI;1538case NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_IR:1539return NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_II;1540case NVPTX::TEX_2D_ARRAY_U32_S32_RR:1541return NVPTX::TEX_2D_ARRAY_U32_S32_RI;1542case NVPTX::TEX_2D_ARRAY_U32_S32_IR:1543return NVPTX::TEX_2D_ARRAY_U32_S32_II;1544case NVPTX::TEX_2D_ARRAY_U32_F32_RR:1545return NVPTX::TEX_2D_ARRAY_U32_F32_RI;1546case NVPTX::TEX_2D_ARRAY_U32_F32_IR:1547return NVPTX::TEX_2D_ARRAY_U32_F32_II;1548case NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_RR:1549return NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_RI;1550case NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_IR:1551return NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_II;1552case NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_RR:1553return NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_RI;1554case NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_IR:1555return NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_II;1556case NVPTX::TEX_3D_F32_S32_RR:1557return NVPTX::TEX_3D_F32_S32_RI;1558case NVPTX::TEX_3D_F32_S32_IR:1559return NVPTX::TEX_3D_F32_S32_II;1560case NVPTX::TEX_3D_F32_F32_RR:1561return NVPTX::TEX_3D_F32_F32_RI;1562case NVPTX::TEX_3D_F32_F32_IR:1563return NVPTX::TEX_3D_F32_F32_II;1564case NVPTX::TEX_3D_F32_F32_LEVEL_RR:1565return NVPTX::TEX_3D_F32_F32_LEVEL_RI;1566case NVPTX::TEX_3D_F32_F32_LEVEL_IR:1567return NVPTX::TEX_3D_F32_F32_LEVEL_II;1568case NVPTX::TEX_3D_F32_F32_GRAD_RR:1569return NVPTX::TEX_3D_F32_F32_GRAD_RI;1570case NVPTX::TEX_3D_F32_F32_GRAD_IR:1571return NVPTX::TEX_3D_F32_F32_GRAD_II;1572case NVPTX::TEX_3D_S32_S32_RR:1573return NVPTX::TEX_3D_S32_S32_RI;1574case NVPTX::TEX_3D_S32_S32_IR:1575return NVPTX::TEX_3D_S32_S32_II;1576case NVPTX::TEX_3D_S32_F32_RR:1577return NVPTX::TEX_3D_S32_F32_RI;1578case NVPTX::TEX_3D_S32_F32_IR:1579return NVPTX::TEX_3D_S32_F32_II;1580case NVPTX::TEX_3D_S32_F32_LEVEL_RR:1581return NVPTX::TEX_3D_S32_F32_LEVEL_RI;1582case NVPTX::TEX_3D_S32_F32_LEVEL_IR:1583return NVPTX::TEX_3D_S32_F32_LEVEL_II;1584case NVPTX::TEX_3D_S32_F32_GRAD_RR:1585return NVPTX::TEX_3D_S32_F32_GRAD_RI;1586case NVPTX::TEX_3D_S32_F32_GRAD_IR:1587return NVPTX::TEX_3D_S32_F32_GRAD_II;1588case NVPTX::TEX_3D_U32_S32_RR:1589return NVPTX::TEX_3D_U32_S32_RI;1590case NVPTX::TEX_3D_U32_S32_IR:1591return NVPTX::TEX_3D_U32_S32_II;1592case NVPTX::TEX_3D_U32_F32_RR:1593return NVPTX::TEX_3D_U32_F32_RI;1594case NVPTX::TEX_3D_U32_F32_IR:1595return NVPTX::TEX_3D_U32_F32_II;1596case NVPTX::TEX_3D_U32_F32_LEVEL_RR:1597return NVPTX::TEX_3D_U32_F32_LEVEL_RI;1598case NVPTX::TEX_3D_U32_F32_LEVEL_IR:1599return NVPTX::TEX_3D_U32_F32_LEVEL_II;1600case NVPTX::TEX_3D_U32_F32_GRAD_RR:1601return NVPTX::TEX_3D_U32_F32_GRAD_RI;1602case NVPTX::TEX_3D_U32_F32_GRAD_IR:1603return NVPTX::TEX_3D_U32_F32_GRAD_II;1604case NVPTX::TEX_CUBE_F32_F32_RR:1605return NVPTX::TEX_CUBE_F32_F32_RI;1606case NVPTX::TEX_CUBE_F32_F32_IR:1607return NVPTX::TEX_CUBE_F32_F32_II;1608case NVPTX::TEX_CUBE_F32_F32_LEVEL_RR:1609return NVPTX::TEX_CUBE_F32_F32_LEVEL_RI;1610case NVPTX::TEX_CUBE_F32_F32_LEVEL_IR:1611return NVPTX::TEX_CUBE_F32_F32_LEVEL_II;1612case NVPTX::TEX_CUBE_S32_F32_RR:1613return NVPTX::TEX_CUBE_S32_F32_RI;1614case NVPTX::TEX_CUBE_S32_F32_IR:1615return NVPTX::TEX_CUBE_S32_F32_II;1616case NVPTX::TEX_CUBE_S32_F32_LEVEL_RR:1617return NVPTX::TEX_CUBE_S32_F32_LEVEL_RI;1618case NVPTX::TEX_CUBE_S32_F32_LEVEL_IR:1619return NVPTX::TEX_CUBE_S32_F32_LEVEL_II;1620case NVPTX::TEX_CUBE_U32_F32_RR:1621return NVPTX::TEX_CUBE_U32_F32_RI;1622case NVPTX::TEX_CUBE_U32_F32_IR:1623return NVPTX::TEX_CUBE_U32_F32_II;1624case NVPTX::TEX_CUBE_U32_F32_LEVEL_RR:1625return NVPTX::TEX_CUBE_U32_F32_LEVEL_RI;1626case NVPTX::TEX_CUBE_U32_F32_LEVEL_IR:1627return NVPTX::TEX_CUBE_U32_F32_LEVEL_II;1628case NVPTX::TEX_CUBE_ARRAY_F32_F32_RR:1629return NVPTX::TEX_CUBE_ARRAY_F32_F32_RI;1630case NVPTX::TEX_CUBE_ARRAY_F32_F32_IR:1631return NVPTX::TEX_CUBE_ARRAY_F32_F32_II;1632case NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_RR:1633return NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_RI;1634case NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_IR:1635return NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_II;1636case NVPTX::TEX_CUBE_ARRAY_S32_F32_RR:1637return NVPTX::TEX_CUBE_ARRAY_S32_F32_RI;1638case NVPTX::TEX_CUBE_ARRAY_S32_F32_IR:1639return NVPTX::TEX_CUBE_ARRAY_S32_F32_II;1640case NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_RR:1641return NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_RI;1642case NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_IR:1643return NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_II;1644case NVPTX::TEX_CUBE_ARRAY_U32_F32_RR:1645return NVPTX::TEX_CUBE_ARRAY_U32_F32_RI;1646case NVPTX::TEX_CUBE_ARRAY_U32_F32_IR:1647return NVPTX::TEX_CUBE_ARRAY_U32_F32_II;1648case NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_RR:1649return NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_RI;1650case NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_IR:1651return NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_II;1652case NVPTX::TLD4_R_2D_F32_F32_RR:1653return NVPTX::TLD4_R_2D_F32_F32_RI;1654case NVPTX::TLD4_R_2D_F32_F32_IR:1655return NVPTX::TLD4_R_2D_F32_F32_II;1656case NVPTX::TLD4_G_2D_F32_F32_RR:1657return NVPTX::TLD4_G_2D_F32_F32_RI;1658case NVPTX::TLD4_G_2D_F32_F32_IR:1659return NVPTX::TLD4_G_2D_F32_F32_II;1660case NVPTX::TLD4_B_2D_F32_F32_RR:1661return NVPTX::TLD4_B_2D_F32_F32_RI;1662case NVPTX::TLD4_B_2D_F32_F32_IR:1663return NVPTX::TLD4_B_2D_F32_F32_II;1664case NVPTX::TLD4_A_2D_F32_F32_RR:1665return NVPTX::TLD4_A_2D_F32_F32_RI;1666case NVPTX::TLD4_A_2D_F32_F32_IR:1667return NVPTX::TLD4_A_2D_F32_F32_II;1668case NVPTX::TLD4_R_2D_S32_F32_RR:1669return NVPTX::TLD4_R_2D_S32_F32_RI;1670case NVPTX::TLD4_R_2D_S32_F32_IR:1671return NVPTX::TLD4_R_2D_S32_F32_II;1672case NVPTX::TLD4_G_2D_S32_F32_RR:1673return NVPTX::TLD4_G_2D_S32_F32_RI;1674case NVPTX::TLD4_G_2D_S32_F32_IR:1675return NVPTX::TLD4_G_2D_S32_F32_II;1676case NVPTX::TLD4_B_2D_S32_F32_RR:1677return NVPTX::TLD4_B_2D_S32_F32_RI;1678case NVPTX::TLD4_B_2D_S32_F32_IR:1679return NVPTX::TLD4_B_2D_S32_F32_II;1680case NVPTX::TLD4_A_2D_S32_F32_RR:1681return NVPTX::TLD4_A_2D_S32_F32_RI;1682case NVPTX::TLD4_A_2D_S32_F32_IR:1683return NVPTX::TLD4_A_2D_S32_F32_II;1684case NVPTX::TLD4_R_2D_U32_F32_RR:1685return NVPTX::TLD4_R_2D_U32_F32_RI;1686case NVPTX::TLD4_R_2D_U32_F32_IR:1687return NVPTX::TLD4_R_2D_U32_F32_II;1688case NVPTX::TLD4_G_2D_U32_F32_RR:1689return NVPTX::TLD4_G_2D_U32_F32_RI;1690case NVPTX::TLD4_G_2D_U32_F32_IR:1691return NVPTX::TLD4_G_2D_U32_F32_II;1692case NVPTX::TLD4_B_2D_U32_F32_RR:1693return NVPTX::TLD4_B_2D_U32_F32_RI;1694case NVPTX::TLD4_B_2D_U32_F32_IR:1695return NVPTX::TLD4_B_2D_U32_F32_II;1696case NVPTX::TLD4_A_2D_U32_F32_RR:1697return NVPTX::TLD4_A_2D_U32_F32_RI;1698case NVPTX::TLD4_A_2D_U32_F32_IR:1699return NVPTX::TLD4_A_2D_U32_F32_II;1700default:1701llvm_unreachable("Unhandled TEX opcode");1702};1703}17041705static unsigned queryRegisterToIndexOpcode(unsigned RegOC) {1706switch (RegOC) {1707case NVPTX::TXQ_CHANNEL_ORDER_R:1708return NVPTX::TXQ_CHANNEL_ORDER_I;1709case NVPTX::TXQ_CHANNEL_DATA_TYPE_R:1710return NVPTX::TXQ_CHANNEL_DATA_TYPE_I;1711case NVPTX::TXQ_WIDTH_R:1712return NVPTX::TXQ_WIDTH_I;1713case NVPTX::TXQ_HEIGHT_R:1714return NVPTX::TXQ_HEIGHT_I;1715case NVPTX::TXQ_DEPTH_R:1716return NVPTX::TXQ_DEPTH_I;1717case NVPTX::TXQ_ARRAY_SIZE_R:1718return NVPTX::TXQ_ARRAY_SIZE_I;1719case NVPTX::TXQ_NUM_SAMPLES_R:1720return NVPTX::TXQ_NUM_SAMPLES_I;1721case NVPTX::TXQ_NUM_MIPMAP_LEVELS_R:1722return NVPTX::TXQ_NUM_MIPMAP_LEVELS_I;1723case NVPTX::SUQ_CHANNEL_ORDER_R:1724return NVPTX::SUQ_CHANNEL_ORDER_I;1725case NVPTX::SUQ_CHANNEL_DATA_TYPE_R:1726return NVPTX::SUQ_CHANNEL_DATA_TYPE_I;1727case NVPTX::SUQ_WIDTH_R:1728return NVPTX::SUQ_WIDTH_I;1729case NVPTX::SUQ_HEIGHT_R:1730return NVPTX::SUQ_HEIGHT_I;1731case NVPTX::SUQ_DEPTH_R:1732return NVPTX::SUQ_DEPTH_I;1733case NVPTX::SUQ_ARRAY_SIZE_R:1734return NVPTX::SUQ_ARRAY_SIZE_I;1735default:1736llvm_unreachable("Unhandled TXQ/SUQ opcode");1737};1738}17391740bool NVPTXReplaceImageHandles::processInstr(MachineInstr &MI) {1741MachineFunction &MF = *MI.getParent()->getParent();1742const MCInstrDesc &MCID = MI.getDesc();1743const NVPTXInstrInfo *TII = MF.getSubtarget<NVPTXSubtarget>().getInstrInfo();17441745if (MCID.TSFlags & NVPTXII::IsTexFlag) {1746// This is a texture fetch, so operand 4 is a texref and operand 5 is1747// a samplerref1748MachineOperand &TexHandle = MI.getOperand(4);1749if (replaceImageHandle(TexHandle, MF))1750MI.setDesc(TII->get(texRegisterToIndexOpcode(MI.getOpcode())));17511752if (!(MCID.TSFlags & NVPTXII::IsTexModeUnifiedFlag)) {1753MachineOperand &SampHandle = MI.getOperand(5);1754if (replaceImageHandle(SampHandle, MF))1755MI.setDesc(TII->get(samplerRegisterToIndexOpcode(MI.getOpcode())));1756}17571758return true;1759} else if (MCID.TSFlags & NVPTXII::IsSuldMask) {1760unsigned VecSize =17611 << (((MCID.TSFlags & NVPTXII::IsSuldMask) >> NVPTXII::IsSuldShift) - 1);17621763// For a surface load of vector size N, the Nth operand will be the surfref1764MachineOperand &SurfHandle = MI.getOperand(VecSize);17651766if (replaceImageHandle(SurfHandle, MF))1767MI.setDesc(TII->get(suldRegisterToIndexOpcode(MI.getOpcode())));17681769return true;1770} else if (MCID.TSFlags & NVPTXII::IsSustFlag) {1771// This is a surface store, so operand 0 is a surfref1772MachineOperand &SurfHandle = MI.getOperand(0);17731774if (replaceImageHandle(SurfHandle, MF))1775MI.setDesc(TII->get(sustRegisterToIndexOpcode(MI.getOpcode())));17761777return true;1778} else if (MCID.TSFlags & NVPTXII::IsSurfTexQueryFlag) {1779// This is a query, so operand 1 is a surfref/texref1780MachineOperand &Handle = MI.getOperand(1);17811782if (replaceImageHandle(Handle, MF))1783MI.setDesc(TII->get(queryRegisterToIndexOpcode(MI.getOpcode())));17841785return true;1786}17871788return false;1789}17901791bool NVPTXReplaceImageHandles::replaceImageHandle(MachineOperand &Op,1792MachineFunction &MF) {1793unsigned Idx;1794if (findIndexForHandle(Op, MF, Idx)) {1795Op.ChangeToImmediate(Idx);1796return true;1797}1798return false;1799}18001801bool NVPTXReplaceImageHandles::1802findIndexForHandle(MachineOperand &Op, MachineFunction &MF, unsigned &Idx) {1803const MachineRegisterInfo &MRI = MF.getRegInfo();1804NVPTXMachineFunctionInfo *MFI = MF.getInfo<NVPTXMachineFunctionInfo>();18051806assert(Op.isReg() && "Handle is not in a reg?");18071808// Which instruction defines the handle?1809MachineInstr &TexHandleDef = *MRI.getVRegDef(Op.getReg());18101811switch (TexHandleDef.getOpcode()) {1812case NVPTX::LD_i64_avar: {1813// The handle is a parameter value being loaded, replace with the1814// parameter symbol1815const NVPTXTargetMachine &TM =1816static_cast<const NVPTXTargetMachine &>(MF.getTarget());1817if (TM.getDrvInterface() == NVPTX::CUDA) {1818// For CUDA, we preserve the param loads coming from function arguments1819return false;1820}18211822assert(TexHandleDef.getOperand(6).isSymbol() && "Load is not a symbol!");1823StringRef Sym = TexHandleDef.getOperand(6).getSymbolName();1824std::string ParamBaseName = std::string(MF.getName());1825ParamBaseName += "_param_";1826assert(Sym.starts_with(ParamBaseName) && "Invalid symbol reference");1827unsigned Param = atoi(Sym.data()+ParamBaseName.size());1828std::string NewSym;1829raw_string_ostream NewSymStr(NewSym);1830NewSymStr << MF.getName() << "_param_" << Param;18311832InstrsToRemove.insert(&TexHandleDef);1833Idx = MFI->getImageHandleSymbolIndex(NewSymStr.str().c_str());1834return true;1835}1836case NVPTX::texsurf_handles: {1837// The handle is a global variable, replace with the global variable name1838assert(TexHandleDef.getOperand(1).isGlobal() && "Load is not a global!");1839const GlobalValue *GV = TexHandleDef.getOperand(1).getGlobal();1840assert(GV->hasName() && "Global sampler must be named!");1841InstrsToRemove.insert(&TexHandleDef);1842Idx = MFI->getImageHandleSymbolIndex(GV->getName().data());1843return true;1844}1845case NVPTX::nvvm_move_i64:1846case TargetOpcode::COPY: {1847bool Res = findIndexForHandle(TexHandleDef.getOperand(1), MF, Idx);1848if (Res) {1849InstrsToRemove.insert(&TexHandleDef);1850}1851return Res;1852}1853default:1854llvm_unreachable("Unknown instruction operating on handle");1855}1856}18571858MachineFunctionPass *llvm::createNVPTXReplaceImageHandlesPass() {1859return new NVPTXReplaceImageHandles();1860}186118621863