Index: lib/Target/AMDGPU/AMDGPUAsmPrinter.h =================================================================== --- lib/Target/AMDGPU/AMDGPUAsmPrinter.h +++ lib/Target/AMDGPU/AMDGPUAsmPrinter.h @@ -40,6 +40,8 @@ NumVGPR(0), NumSGPR(0), FlatUsed(false), + NumSGPRsForNumActiveWavesPerEU(0), + NumVGPRsForNumActiveWavesPerEU(0), ReservedVGPRFirst(0), ReservedVGPRCount(0), VCCUsed(false), @@ -69,6 +71,13 @@ uint32_t LDSSize; bool FlatUsed; + // Number of SGPRs that meets number of active waves per execution unit + // request. + uint32_t NumSGPRsForNumActiveWavesPerEU; + // Number of VGPRs that meets number of active waves per execution unit + // request. + uint32_t NumVGPRsForNumActiveWavesPerEU; + // If ReservedVGPRCount is 0 then must be 0. Otherwise, this is the first // fixed VGPR number reserved. uint16_t ReservedVGPRFirst; Index: lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp =================================================================== --- lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -195,6 +195,16 @@ OutStreamer->emitRawComment(" LDSByteSize: " + Twine(KernelInfo.LDSSize) + " bytes/workgroup (compile time only)", false); + OutStreamer->emitRawComment(" SGPRBlocks: " + + Twine(KernelInfo.SGPRBlocks), false); + OutStreamer->emitRawComment(" VGPRBlocks: " + + Twine(KernelInfo.VGPRBlocks), false); + + OutStreamer->emitRawComment(" NumSGPRsForNumActiveWavesPerEU: " + + Twine(KernelInfo.NumSGPRsForNumActiveWavesPerEU), false); + OutStreamer->emitRawComment(" NumVGPRsForNumActiveWavesPerEU: " + + Twine(KernelInfo.NumVGPRsForNumActiveWavesPerEU), false); + OutStreamer->emitRawComment(" ReservedVGPRFirst: " + Twine(KernelInfo.ReservedVGPRFirst), false); OutStreamer->emitRawComment(" ReservedVGPRCount: " + Twine(KernelInfo.ReservedVGPRCount), @@ -436,22 +446,27 @@ ExtraSGPRs = 6; } - MaxSGPR += ExtraSGPRs; - // Record first reserved register and reserved register count fields, and // update max register counts if "amdgpu-debugger-reserve-regs" attribute was - // specified. - if (STM.debuggerReserveRegs()) { - ProgInfo.ReservedVGPRFirst = MaxVGPR + 1; - ProgInfo.ReservedVGPRCount = MFI->getDebuggerReservedVGPRCount(); - MaxVGPR += MFI->getDebuggerReservedVGPRCount(); - } + // requested. + ProgInfo.ReservedVGPRFirst = STM.debuggerReserveRegs() ? MaxVGPR + 1 : 0; + ProgInfo.ReservedVGPRCount = RI->getDebuggerReservedNumVGPRs(); + + MaxSGPR += ExtraSGPRs; + MaxVGPR += RI->getDebuggerReservedNumVGPRs(); // We found the maximum register index. They start at 0, so add one to get the // number of registers. ProgInfo.NumVGPR = MaxVGPR + 1; ProgInfo.NumSGPR = MaxSGPR + 1; + // Adjust number of registers used to meet default/requested minimum/maximum + // number of active waves per execution unit request. + ProgInfo.NumSGPRsForNumActiveWavesPerEU = std::max( + ProgInfo.NumSGPR, RI->getMinNumSGPRs(MFI->getMaxNumActiveWavesPerEU())); + ProgInfo.NumVGPRsForNumActiveWavesPerEU = std::max( + ProgInfo.NumVGPR, RI->getMinNumVGPRs(MFI->getMaxNumActiveWavesPerEU())); + if (STM.hasSGPRInitBug()) { if (ProgInfo.NumSGPR > AMDGPUSubtarget::FIXED_SGPR_COUNT_FOR_INIT_BUG) { LLVMContext &Ctx = MF.getFunction()->getContext(); @@ -462,6 +477,8 @@ } ProgInfo.NumSGPR = AMDGPUSubtarget::FIXED_SGPR_COUNT_FOR_INIT_BUG; + ProgInfo.NumSGPRsForNumActiveWavesPerEU = + AMDGPUSubtarget::FIXED_SGPR_COUNT_FOR_INIT_BUG; } if (MFI->NumUserSGPRs > STM.getMaxNumUserSGPRs()) { @@ -478,8 +495,15 @@ Ctx.diagnose(Diag); } - ProgInfo.VGPRBlocks = (ProgInfo.NumVGPR - 1) / 4; - ProgInfo.SGPRBlocks = (ProgInfo.NumSGPR - 1) / 8; + // SGPRBlocks is actual number of SGPR blocks minus 1. + ProgInfo.SGPRBlocks = alignTo(ProgInfo.NumSGPRsForNumActiveWavesPerEU, + RI->getSGPRAllocGranule()); + ProgInfo.SGPRBlocks = ProgInfo.SGPRBlocks / RI->getSGPRAllocGranule() - 1; + // VGPRBlocks is actual number of VGPR blocks minus 1. + ProgInfo.VGPRBlocks = alignTo(ProgInfo.NumVGPRsForNumActiveWavesPerEU, + RI->getVGPRAllocGranule()); + ProgInfo.VGPRBlocks = ProgInfo.VGPRBlocks / RI->getVGPRAllocGranule() - 1; + // Set the value to initialize FP_ROUND and FP_DENORM parts of the mode // register. ProgInfo.FloatMode = getFPMode(MF); @@ -505,8 +529,8 @@ LDSAlignShift = 9; } - unsigned LDSSpillSize = MFI->LDSWaveSpillSize * - MFI->getMaximumWorkGroupSize(MF); + unsigned LDSSpillSize = + MFI->LDSWaveSpillSize * MFI->getMaxFlatWorkGroupSize(); ProgInfo.LDSSize = MFI->LDSSize + LDSSpillSize; ProgInfo.LDSBlocks = Index: lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp =================================================================== --- lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp +++ lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp @@ -182,13 +182,12 @@ // TODO: Have some sort of hint or other heuristics to guess occupancy based // on other factors.. - unsigned OccupancyHint - = AMDGPU::getIntegerAttribute(F, "amdgpu-max-waves-per-eu", 0); + unsigned OccupancyHint = ST.getNumActiveWavesPerEU(F).second; if (OccupancyHint == 0) OccupancyHint = 7; // Clamp to max value. - OccupancyHint = std::min(OccupancyHint, ST.getMaxWavesPerCU()); + OccupancyHint = std::min(OccupancyHint, ST.getMaxNumActiveWavesPerEU()); // Check the hint but ignore it if it's obviously wrong from the existing LDS // usage. @@ -646,10 +645,12 @@ } const Function &ContainingFunction = *I.getParent()->getParent(); + const AMDGPUSubtarget &ST = + TM->getSubtarget(ContainingFunction); // FIXME: We should also try to get this value from the reqd_work_group_size // function attribute if it is available. - unsigned WorkGroupSize = AMDGPU::getMaximumWorkGroupSize(ContainingFunction); + unsigned WorkGroupSize = ST.getFlatWorkGroupSizes(ContainingFunction).second; const DataLayout &DL = Mod->getDataLayout(); Index: lib/Target/AMDGPU/AMDGPUSubtarget.h =================================================================== --- lib/Target/AMDGPU/AMDGPUSubtarget.h +++ lib/Target/AMDGPU/AMDGPUSubtarget.h @@ -342,14 +342,6 @@ return EnableXNACK; } - unsigned getMaxWavesPerCU() const { - if (getGeneration() >= AMDGPUSubtarget::SOUTHERN_ISLANDS) - return 10; - - // FIXME: Not sure what this is for other subtagets. - return 8; - } - bool enableSubRegLiveness() const override { return true; } @@ -363,6 +355,104 @@ unsigned getMaxNumUserSGPRs() const { return 16; } + + /// Returns number of execution units per compute unit supported by the + /// subtarget. + unsigned getNumEUsPerCU() const { + return 4; + } + + /// Returns maximum number of work groups per compute unit supported by the + /// subtarget and limited by given flat work group size. + unsigned getMaxNumWorkGroupsPerCU(unsigned FlatWorkGroupSize) const { + if (getGeneration() < AMDGPUSubtarget::SOUTHERN_ISLANDS) + return 8; + return getNumWavesPerWorkGroup(FlatWorkGroupSize) == 1 ? 40 : 16; + } + + /// Returns maximum number of active waves per compute unit supported by the + /// subtarget without any kind of limitation. + unsigned getMaxNumActiveWavesPerCU() const { + return getMaxNumActiveWavesPerEU() * getNumEUsPerCU(); + } + + /// Returns maximum number of active waves per compute unit supported by the + /// subtarget and limited by given flat work group size. + unsigned getMaxNumActiveWavesPerCU(unsigned FlatWorkGroupSize) const { + unsigned NumWavesPerWorkGroup = + getNumWavesPerWorkGroup(FlatWorkGroupSize); + unsigned MaxNumWorkGroupsPerCU = + getMaxNumWorkGroupsPerCU(FlatWorkGroupSize); + unsigned MaxNumActiveWavesPerCU = + NumWavesPerWorkGroup * MaxNumWorkGroupsPerCU; + MaxNumActiveWavesPerCU = + std::min(MaxNumActiveWavesPerCU, getMaxNumActiveWavesPerCU()); + MaxNumActiveWavesPerCU = + alignDown(MaxNumActiveWavesPerCU, NumWavesPerWorkGroup); + MaxNumActiveWavesPerCU = MaxNumActiveWavesPerCU / NumWavesPerWorkGroup; + MaxNumActiveWavesPerCU = MaxNumActiveWavesPerCU * NumWavesPerWorkGroup; + return MaxNumActiveWavesPerCU; + } + + /// Returns minimum number of active waves per execution unit supported by the + /// subtarget. + unsigned getMinNumActiveWavesPerEU() const { + return 1; + } + + /// Returns maximum number of active waves per execution unit supported by the + /// subtarget without any kind of limitation. + unsigned getMaxNumActiveWavesPerEU() const { + // FIXME: Not sure what this is for subtargets below Southern Islands. + if (getGeneration() < AMDGPUSubtarget::SOUTHERN_ISLANDS) + return 8; + // FIXME: Need to take scratch memory into account. + return 10; + } + + /// Returns maximum number of active waves per execution unit supported by the + /// subtarget and limited by given flat work group size. + unsigned getMaxNumActiveWavesPerEU(unsigned FlatWorkGroupSize) const { + unsigned MaxNumActiveWavesPerCU = + getMaxNumActiveWavesPerCU(FlatWorkGroupSize); + unsigned MaxNumActiveWavesPerEU = + alignDown(MaxNumActiveWavesPerCU, getNumEUsPerCU()); + MaxNumActiveWavesPerEU = MaxNumActiveWavesPerEU / getNumEUsPerCU(); + return MaxNumActiveWavesPerEU; + } + + /// Returns minimum flat work group size supported by the subtarget. + unsigned getMinFlatWorkGroupSize() const { + return 1; + } + + /// Returns maximum flat work group size supported by the subtarget. + unsigned getMaxFlatWorkGroupSize() const { + return 2048; + } + + /// Returns number of waves per work group given the flat work group size. + unsigned getNumWavesPerWorkGroup(unsigned FlatWorkGroupSize) const { + return alignTo(FlatWorkGroupSize, getWavefrontSize()) / getWavefrontSize(); + } + + /// Returns subtarget's default pair of minimum/maximum flat work group sizes + /// for function \p F, or minimum/maximum flat work group sizes explicitly + /// requested using "amdgpu-flat-work-group-size" attribute attached to + /// function \p F. Returns subtarget's default values and emits error if + /// explicitly requested values cannot be converted to integer, or violate + /// subtarget's specifications. + std::pair getFlatWorkGroupSizes(const Function &F) const; + + /// Returns subtarget's default pair of minimum/maximum number of active waves + /// per execution unit for function \p F, or minimum/maximum number of active + /// waves per execution unit explicitly requested using + /// "amdgpu-num-active-waves-per-eu" attribute attached to function \p F. + /// Returns subtarget's default values and emits error if explicitly requested + /// values cannot be converted to integer, violate subtarget's specifications, + /// or are not compatible with minimum/maximum number of active waves limited + /// by flat work group size, register usage, and/or lds usage. + std::pair getNumActiveWavesPerEU(const Function &F) const; }; } // End namespace llvm Index: lib/Target/AMDGPU/AMDGPUSubtarget.cpp =================================================================== --- lib/Target/AMDGPU/AMDGPUSubtarget.cpp +++ lib/Target/AMDGPU/AMDGPUSubtarget.cpp @@ -251,3 +251,100 @@ } } +std::pair AMDGPUSubtarget::getFlatWorkGroupSizes( + const Function &F) const { + LLVMContext &Ctx = F.getContext(); + + // Default minimum/maximum flat work group sizes. + std::pair Default = + AMDGPU::isCompute(F.getCallingConv()) ? + std::pair(128, 256) : + std::pair(1, getWavefrontSize()); + // Requested minimum/maximum flat work group sizes. + std::pair Requested = + AMDGPU::getIntegerPairAttribute(F, "amdgpu-flat-work-group-size", Default); + + // Make sure requested minimum is less than requested maximum. + if (Requested.first > Requested.second) { + Ctx.emitError("invalid amdgpu-flat-work-group-size: " + "minimum is greater than maximum"); + return Default; + } + // Make sure requested values do not violate subtarget's specifications. + if (Requested.first < getMinFlatWorkGroupSize()) { + Ctx.emitError("invalid amdgpu-flat-work-group-size: " + "requested minimum flat work group size is not supported by " + "the subtarget"); + return Default; + } + if (Requested.second > getMaxFlatWorkGroupSize()) { + Ctx.emitError("invalid amdgpu-flat-work-group-size: " + "requested maximum flat work group size is not supported by " + "the subtarget"); + return Default; + } + + return Requested; +} + +std::pair AMDGPUSubtarget::getNumActiveWavesPerEU( + const Function &F) const { + LLVMContext &Ctx = F.getContext(); + + // Default minimum/maximum number of active waves per execution unit. + std::pair Default = std::pair(1, 0); + // Default/requested minimum/maximum flat work group sizes. + std::pair FlatWorkGroupSizes = getFlatWorkGroupSizes(F); + // If minimum/maximum flat work group sizes were explicitly requested using + // "amdgpu-flat-work-group-size" attribute, then set default minimum/maximum + // number of active waves per execution unit to values implied by requested + // minimum/maximum flat work group sizes. + unsigned ImpliedByMinFlatWorkGroupSize = + getMaxNumActiveWavesPerEU(FlatWorkGroupSizes.first); + unsigned ImpliedByMaxFlatWorkGroupSize = + getMaxNumActiveWavesPerEU(FlatWorkGroupSizes.second); + unsigned MinImpliedByFlatWorkGroupSize = + std::min(ImpliedByMinFlatWorkGroupSize, ImpliedByMaxFlatWorkGroupSize); + unsigned MaxImpliedByFlatWorkGroupSize = + std::max(ImpliedByMinFlatWorkGroupSize, ImpliedByMaxFlatWorkGroupSize); + if (F.hasFnAttribute("amdgpu-flat-work-group-size")) { + Default.first = MinImpliedByFlatWorkGroupSize; + Default.second = MaxImpliedByFlatWorkGroupSize; + } + // Requested minimum/maximum number of active waves per execution unit. + std::pair Requested = AMDGPU::getIntegerPairAttribute( + F, "amdgpu-num-active-waves-per-eu", Default, true); + + // Make sure requested minimum is less than requested maximum. + if (Requested.second && Requested.first > Requested.second) { + Ctx.emitError("invalid amdgpu-num-active-waves-per-eu: " + "minimum is greater than maximum"); + return Default; + } + // Make sure requested values do not violate subtarget's specifications. + if (Requested.first < getMinNumActiveWavesPerEU() || + Requested.first > getMaxNumActiveWavesPerEU()) { + Ctx.emitError("invalid amdgpu-num-active-waves-per-eu: " + "requested minimum number of active waves per execution unit " + "is not supported by the subtarget"); + return Default; + } + if (Requested.second > getMaxNumActiveWavesPerEU()) { + Ctx.emitError("invalid amdgpu-num-active-waves-per-eu: " + "requested maximum number of active waves per execution unit " + "is not supported by the subtarget"); + return Default; + } + // Make sure requested values are compatible with values implied by requested + // minimum/maximum flat work group sizes. + if (Requested.first > MinImpliedByFlatWorkGroupSize || + Requested.second > MaxImpliedByFlatWorkGroupSize) { + Ctx.emitError("invalid amdgpu-num-active-waves-per-eu: " + "requested number of active waves per execution unit cannot " + "be achieved with default or requested flat work group " + "sizes"); + return Default; + } + + return Requested; +} Index: lib/Target/AMDGPU/SIInstrInfo.cpp =================================================================== --- lib/Target/AMDGPU/SIInstrInfo.cpp +++ lib/Target/AMDGPU/SIInstrInfo.cpp @@ -29,7 +29,7 @@ using namespace llvm; SIInstrInfo::SIInstrInfo(const AMDGPUSubtarget &st) - : AMDGPUInstrInfo(st), RI() {} + : AMDGPUInstrInfo(st), RI(st) {} //===----------------------------------------------------------------------===// // TargetInstrInfo callbacks @@ -734,7 +734,7 @@ const SIRegisterInfo *TRI = static_cast(ST.getRegisterInfo()); DebugLoc DL = MBB.findDebugLoc(MI); - unsigned WorkGroupSize = MFI->getMaximumWorkGroupSize(*MF); + unsigned WorkGroupSize = MFI->getMaxFlatWorkGroupSize(); unsigned WavefrontSize = ST.getWavefrontSize(); unsigned TIDReg = MFI->getTIDReg(); Index: lib/Target/AMDGPU/SIMachineFunctionInfo.h =================================================================== --- lib/Target/AMDGPU/SIMachineFunctionInfo.h +++ lib/Target/AMDGPU/SIMachineFunctionInfo.h @@ -60,10 +60,12 @@ unsigned PSInputAddr; bool ReturnsVoid; - unsigned MaximumWorkGroupSize; - - // Number of reserved VGPRs for debugger usage. - unsigned DebuggerReservedVGPRCount; + // A pair of default/requested minimum/maximum flat work group sizes. + // Minimum - first, maximum - second. + std::pair FlatWorkGroupSizes; + // A pair of default/requested minimum/maximum number of active waves per + // execution unit. Minimum - first, maximum - second. + std::pair NumActiveWavesPerEU; public: // FIXME: Make private @@ -329,12 +331,39 @@ ReturnsVoid = Value; } - /// \returns Number of reserved VGPRs for debugger usage. - unsigned getDebuggerReservedVGPRCount() const { - return DebuggerReservedVGPRCount; + /// Returns a pair of default/requested minimum/maximum flat work group sizes + /// for this function. + std::pair getFlatWorkGroupSizes() const { + return FlatWorkGroupSizes; + } + + /// Returns default/requested minimum flat work group size for this function. + unsigned getMinFlatWorkGroupSize() const { + return FlatWorkGroupSizes.first; + } + + /// Returns default/requested maximum flat work group sizes for this function. + unsigned getMaxFlatWorkGroupSize() const { + return FlatWorkGroupSizes.second; } - unsigned getMaximumWorkGroupSize(const MachineFunction &MF) const; + /// Returns a pair of default/requested minimum/maximum number of active waves + /// per execution unit. + std::pair getNumActiveWavesPerEU() const { + return NumActiveWavesPerEU; + } + + /// Returns default/requested minimum number of active waves per execution + /// unit. + unsigned getMinNumActiveWavesPerEU() const { + return NumActiveWavesPerEU.first; + } + + /// Returns default/requested maximum number of active waves per execution + /// unit. + unsigned getMaxNumActiveWavesPerEU() const { + return NumActiveWavesPerEU.second; + } }; } // End namespace llvm Index: lib/Target/AMDGPU/SIMachineFunctionInfo.cpp =================================================================== --- lib/Target/AMDGPU/SIMachineFunctionInfo.cpp +++ lib/Target/AMDGPU/SIMachineFunctionInfo.cpp @@ -48,8 +48,8 @@ PrivateSegmentWaveByteOffsetSystemSGPR(AMDGPU::NoRegister), PSInputAddr(0), ReturnsVoid(true), - MaximumWorkGroupSize(0), - DebuggerReservedVGPRCount(0), + FlatWorkGroupSizes(std::pair(0, 0)), + NumActiveWavesPerEU(std::pair(0, 0)), LDSWaveSpillSize(0), PSInputEna(0), NumUserSGPRs(0), @@ -129,13 +129,8 @@ ST.isAmdHsaOS()) FlatScratchInit = true; - if (AMDGPU::isCompute(F->getCallingConv())) - MaximumWorkGroupSize = AMDGPU::getMaximumWorkGroupSize(*F); - else - MaximumWorkGroupSize = ST.getWavefrontSize(); - - if (ST.debuggerReserveRegs()) - DebuggerReservedVGPRCount = 4; + FlatWorkGroupSizes = ST.getFlatWorkGroupSizes(*F); + NumActiveWavesPerEU = ST.getNumActiveWavesPerEU(*F); } unsigned SIMachineFunctionInfo::addPrivateSegmentBuffer( @@ -212,8 +207,3 @@ Spill.VGPR = LaneVGPRs[LaneVGPRIdx]; return Spill; } - -unsigned SIMachineFunctionInfo::getMaximumWorkGroupSize( - const MachineFunction &MF) const { - return MaximumWorkGroupSize; -} Index: lib/Target/AMDGPU/SIRegisterInfo.h =================================================================== --- lib/Target/AMDGPU/SIRegisterInfo.h +++ lib/Target/AMDGPU/SIRegisterInfo.h @@ -25,6 +25,7 @@ struct SIRegisterInfo final : public AMDGPURegisterInfo { private: + const AMDGPUSubtarget &ST; unsigned SGPR32SetID; unsigned VGPR32SetID; BitVector SGPRPressureSets; @@ -35,7 +36,7 @@ BitVector &PressureSets) const; public: - SIRegisterInfo(); + SIRegisterInfo(const AMDGPUSubtarget &st); /// Return the end register initially reserved for the scratch buffer in case /// spilling is needed. @@ -173,15 +174,6 @@ unsigned getPreloadedValue(const MachineFunction &MF, enum PreloadedValue Value) const; - /// \brief Give the maximum number of VGPRs that can be used by \p WaveCount - /// concurrent waves. - unsigned getNumVGPRsAllowed(unsigned WaveCount) const; - - /// \brief Give the maximum number of SGPRs that can be used by \p WaveCount - /// concurrent waves. - unsigned getNumSGPRsAllowed(AMDGPUSubtarget::Generation gen, - unsigned WaveCount) const; - unsigned findUnusedRegister(const MachineRegisterInfo &MRI, const TargetRegisterClass *RC) const; @@ -190,6 +182,84 @@ bool isVGPR(const MachineRegisterInfo &MRI, unsigned Reg) const; + /// Returns SGPR allocation granularity supported by the subtarget. + unsigned getSGPRAllocGranule() const { + return 8; + } + + /// Returns total number of SGPRs supported by the subtarget. + unsigned getTotalNumSGPRs() const { + if (ST.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS) + return 800; + return 512; + } + + /// Returns addressable number of SGPRs supported by the subtarget. + unsigned getAddressableNumSGPRs() const { + if (ST.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS) + return 102; + return 104; + } + + /// Returns reserved number of SGPRs supported by the subtarget. + unsigned getReservedNumSGPRs() const { + if (ST.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS) + return 6; // VCC, FLAT_SCRATCH, XNACK. + return 2; // VCC. + } + + /// Returns minimum number of SGPRs that meets given number of active waves + /// per execution unit requirement. + unsigned getMinNumSGPRs(unsigned NumActiveWavesPerEU) const; + + /// Returns maximum number of SGPRs that meets given number of active waves + /// per execution unit requirement. + unsigned getMaxNumSGPRs(unsigned NumActiveWavesPerEU) const; + + /// Returns maximum number of SGPRs that meets number of active waves per + /// execution unit requirement for function \p MF, or number of SGPRs + /// explicitly requested using "amdgpu-num-sgpr" attribute attached to + /// function \p MF. Returns value that meets number of active waves per + /// execution unit requirement and emits error if explicitly requested value + /// cannot be converted to integer, violates subtarget's specifications, or + /// does not meet number of active waver per execution unit requirement. + unsigned getMaxNumSGPRs(const MachineFunction &MF) const; + + /// Returns VGPR allocation granularity supported by the subtarget. + unsigned getVGPRAllocGranule() const { + return 4; + } + + /// Returns total number of VGPRs supported by the subtarget. + unsigned getTotalNumVGPRs() const { + return 256; + } + + /// Returns reserved number of VGPRs for debugger use supported by the + /// subtarget. + unsigned getDebuggerReservedNumVGPRs() const { + if (ST.debuggerReserveRegs()) + return 4; + return 0; + } + + /// Returns minimum number of SGPRs that meets given number of active waves + /// per execution unit requirement. + unsigned getMinNumVGPRs(unsigned NumActiveWavesPerEU) const; + + /// Returns maximum number of VGPRs that meets given number of active waves + /// per execution unit requirement. + unsigned getMaxNumVGPRs(unsigned NumActiveWavesPerEU) const; + + /// Returns maximum number of VGPRs that meets number of active waves per + /// execution unit requirement for function \p MF, or number of VGPRs + /// explicitly requested using "amdgpu-num-vgpr" attribute attached to + /// function \p MF. Returns value that meets number of active waves per + /// execution unit requirement and emits error if explicitly requested value + /// cannot be converted to integer, violates subtarget's specifications, or + /// does not meet number of active waves per execution unit requirement. + unsigned getMaxNumVGPRs(const MachineFunction &MF) const; + private: void buildScratchLoadStore(MachineBasicBlock::iterator MI, unsigned LoadStoreOp, const MachineOperand *SrcDst, Index: lib/Target/AMDGPU/SIRegisterInfo.cpp =================================================================== --- lib/Target/AMDGPU/SIRegisterInfo.cpp +++ lib/Target/AMDGPU/SIRegisterInfo.cpp @@ -23,53 +23,6 @@ using namespace llvm; -static unsigned getMaxWaveCountPerSIMD(const MachineFunction &MF) { - const SIMachineFunctionInfo& MFI = *MF.getInfo(); - const AMDGPUSubtarget &ST = MF.getSubtarget(); - unsigned SIMDPerCU = 4; - - unsigned MaxInvocationsPerWave = SIMDPerCU * ST.getWavefrontSize(); - return alignTo(MFI.getMaximumWorkGroupSize(MF), MaxInvocationsPerWave) / - MaxInvocationsPerWave; -} - -static unsigned getMaxWorkGroupSGPRCount(const MachineFunction &MF) { - const AMDGPUSubtarget &ST = MF.getSubtarget(); - unsigned MaxWaveCountPerSIMD = getMaxWaveCountPerSIMD(MF); - - unsigned TotalSGPRCountPerSIMD, AddressableSGPRCount, SGPRUsageAlignment; - unsigned ReservedSGPRCount; - - if (ST.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS) { - TotalSGPRCountPerSIMD = 800; - AddressableSGPRCount = 102; - SGPRUsageAlignment = 16; - ReservedSGPRCount = 6; // VCC, FLAT_SCRATCH, XNACK - } else { - TotalSGPRCountPerSIMD = 512; - AddressableSGPRCount = 104; - SGPRUsageAlignment = 8; - ReservedSGPRCount = 2; // VCC - } - - unsigned MaxSGPRCount = (TotalSGPRCountPerSIMD / MaxWaveCountPerSIMD); - MaxSGPRCount = alignDown(MaxSGPRCount, SGPRUsageAlignment); - - if (ST.hasSGPRInitBug()) - MaxSGPRCount = AMDGPUSubtarget::FIXED_SGPR_COUNT_FOR_INIT_BUG; - - return std::min(MaxSGPRCount - ReservedSGPRCount, AddressableSGPRCount); -} - -static unsigned getMaxWorkGroupVGPRCount(const MachineFunction &MF) { - unsigned MaxWaveCountPerSIMD = getMaxWaveCountPerSIMD(MF); - unsigned TotalVGPRCountPerSIMD = 256; - unsigned VGPRUsageAlignment = 4; - - return alignDown(TotalVGPRCountPerSIMD / MaxWaveCountPerSIMD, - VGPRUsageAlignment); -} - static bool hasPressureSet(const int *PSets, unsigned PSetID) { for (unsigned i = 0; PSets[i] != -1; ++i) { if (PSets[i] == (int)PSetID) @@ -89,9 +42,11 @@ } } -SIRegisterInfo::SIRegisterInfo() : AMDGPURegisterInfo(), - SGPRPressureSets(getNumRegPressureSets()), - VGPRPressureSets(getNumRegPressureSets()) { +SIRegisterInfo::SIRegisterInfo(const AMDGPUSubtarget &st) + : AMDGPURegisterInfo(), + ST(st), + SGPRPressureSets(getNumRegPressureSets()), + VGPRPressureSets(getNumRegPressureSets()) { unsigned NumRegPressureSets = getNumRegPressureSets(); SGPR32SetID = NumRegPressureSets; @@ -118,14 +73,14 @@ unsigned SIRegisterInfo::reservedPrivateSegmentBufferReg( const MachineFunction &MF) const { - unsigned BaseIdx = alignDown(getMaxWorkGroupSGPRCount(MF), 4) - 4; + unsigned BaseIdx = alignDown(getMaxNumSGPRs(MF), 4) - 4; unsigned BaseReg(AMDGPU::SGPR_32RegClass.getRegister(BaseIdx)); return getMatchingSuperReg(BaseReg, AMDGPU::sub0, &AMDGPU::SReg_128RegClass); } unsigned SIRegisterInfo::reservedPrivateSegmentWaveByteOffsetReg( const MachineFunction &MF) const { - unsigned RegCount = getMaxWorkGroupSGPRCount(MF); + unsigned RegCount = getMaxNumSGPRs(MF); unsigned Reg; // Try to place it in a hole after PrivateSegmentbufferReg. @@ -160,18 +115,16 @@ reserveRegisterTuples(Reserved, AMDGPU::TTMP8_TTMP9); reserveRegisterTuples(Reserved, AMDGPU::TTMP10_TTMP11); - unsigned MaxWorkGroupSGPRCount = getMaxWorkGroupSGPRCount(MF); - unsigned MaxWorkGroupVGPRCount = getMaxWorkGroupVGPRCount(MF); - - unsigned NumSGPRs = AMDGPU::SGPR_32RegClass.getNumRegs(); - unsigned NumVGPRs = AMDGPU::VGPR_32RegClass.getNumRegs(); - for (unsigned i = MaxWorkGroupSGPRCount; i < NumSGPRs; ++i) { + unsigned MaxNumSGPRs = getMaxNumSGPRs(MF); + unsigned TotalNumSGPRs = AMDGPU::SGPR_32RegClass.getNumRegs(); + for (unsigned i = MaxNumSGPRs; i < TotalNumSGPRs; ++i) { unsigned Reg = AMDGPU::SGPR_32RegClass.getRegister(i); reserveRegisterTuples(Reserved, Reg); } - - for (unsigned i = MaxWorkGroupVGPRCount; i < NumVGPRs; ++i) { + unsigned MaxNumVGPRs = getMaxNumVGPRs(MF); + unsigned TotalNumVGPRs = AMDGPU::VGPR_32RegClass.getNumRegs(); + for (unsigned i = MaxNumVGPRs; i < TotalNumVGPRs; ++i) { unsigned Reg = AMDGPU::VGPR_32RegClass.getRegister(i); reserveRegisterTuples(Reserved, Reg); } @@ -193,29 +146,13 @@ assert(!isSubRegister(ScratchRSrcReg, ScratchWaveOffsetReg)); } - // Reserve registers for debugger usage if "amdgpu-debugger-reserve-trap-regs" - // attribute was specified. - const AMDGPUSubtarget &ST = MF.getSubtarget(); - if (ST.debuggerReserveRegs()) { - unsigned ReservedVGPRFirst = - MaxWorkGroupVGPRCount - MFI->getDebuggerReservedVGPRCount(); - for (unsigned i = ReservedVGPRFirst; i < MaxWorkGroupVGPRCount; ++i) { - unsigned Reg = AMDGPU::VGPR_32RegClass.getRegister(i); - reserveRegisterTuples(Reserved, Reg); - } - } - return Reserved; } unsigned SIRegisterInfo::getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const { - const AMDGPUSubtarget &STI = MF.getSubtarget(); - // FIXME: We should adjust the max number of waves based on LDS size. - unsigned SGPRLimit = getNumSGPRsAllowed(STI.getGeneration(), - STI.getMaxWavesPerCU()); - unsigned VGPRLimit = getNumVGPRsAllowed(STI.getMaxWavesPerCU()); - + unsigned SGPRLimit = getMaxNumSGPRs(MF); + unsigned VGPRLimit = getMaxNumVGPRs(MF); unsigned VSLimit = SGPRLimit + VGPRLimit; if (SGPRPressureSets.test(Idx) && VGPRPressureSets.test(Idx)) { @@ -274,8 +211,7 @@ DL = Ins->getDebugLoc(); MachineFunction *MF = MBB->getParent(); - const AMDGPUSubtarget &Subtarget = MF->getSubtarget(); - const TargetInstrInfo *TII = Subtarget.getInstrInfo(); + const TargetInstrInfo *TII = ST.getInstrInfo(); if (Offset == 0) { BuildMI(*MBB, Ins, DL, TII->get(AMDGPU::V_MOV_B32_e32), BaseReg) @@ -297,9 +233,7 @@ MachineBasicBlock *MBB = MI.getParent(); MachineFunction *MF = MBB->getParent(); - const AMDGPUSubtarget &Subtarget = MF->getSubtarget(); - const SIInstrInfo *TII - = static_cast(Subtarget.getInstrInfo()); + const SIInstrInfo *TII = static_cast(ST.getInstrInfo()); #ifndef NDEBUG // FIXME: Is it possible to be storing a frame index to itself? @@ -898,10 +832,8 @@ // easy to detect from used intrinsics. Scratch setup is harder to know. unsigned SIRegisterInfo::getPreloadedValue(const MachineFunction &MF, enum PreloadedValue Value) const { - const SIMachineFunctionInfo *MFI = MF.getInfo(); - const AMDGPUSubtarget &ST = MF.getSubtarget(); - (void)ST; + switch (Value) { case SIRegisterInfo::WORKGROUP_ID_X: assert(MFI->hasWorkGroupIDX()); @@ -956,50 +888,192 @@ return AMDGPU::NoRegister; } -unsigned SIRegisterInfo::getNumVGPRsAllowed(unsigned WaveCount) const { - switch(WaveCount) { - case 10: return 24; - case 9: return 28; - case 8: return 32; - case 7: return 36; - case 6: return 40; - case 5: return 48; - case 4: return 64; - case 3: return 84; - case 2: return 128; - default: return 256; +bool SIRegisterInfo::isVGPR(const MachineRegisterInfo &MRI, + unsigned Reg) const { + const TargetRegisterClass *RC; + if (TargetRegisterInfo::isVirtualRegister(Reg)) + RC = MRI.getRegClass(Reg); + else + RC = getPhysRegClass(Reg); + + return hasVGPRs(RC); +} + +unsigned SIRegisterInfo::getMinNumSGPRs(unsigned NumActiveWavesPerEU) const { + if (ST.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS) { + switch (NumActiveWavesPerEU) { + case 0: return 0; + case 10: return 0; + case 9: return 0; + case 8: return 81; + default: return 97; + } + } else { + switch (NumActiveWavesPerEU) { + case 0: return 0; + case 10: return 0; + case 9: return 49; + case 8: return 57; + case 7: return 65; + case 6: return 73; + case 5: return 81; + default: return 97; + } } } -unsigned SIRegisterInfo::getNumSGPRsAllowed(AMDGPUSubtarget::Generation gen, - unsigned WaveCount) const { - if (gen >= AMDGPUSubtarget::VOLCANIC_ISLANDS) { - switch (WaveCount) { +unsigned SIRegisterInfo::getMaxNumSGPRs(unsigned NumActiveWavesPerEU) const { + if (ST.getGeneration() >= AMDGPUSubtarget::VOLCANIC_ISLANDS) { + switch (NumActiveWavesPerEU) { + case 0: return 80; case 10: return 80; case 9: return 80; case 8: return 96; - default: return 102; + default: return getAddressableNumSGPRs(); } } else { - switch(WaveCount) { + switch (NumActiveWavesPerEU) { + case 0: return 48; case 10: return 48; case 9: return 56; case 8: return 64; case 7: return 72; case 6: return 80; case 5: return 96; - default: return 103; + default: return getAddressableNumSGPRs(); } } } -bool SIRegisterInfo::isVGPR(const MachineRegisterInfo &MRI, - unsigned Reg) const { - const TargetRegisterClass *RC; - if (TargetRegisterInfo::isVirtualRegister(Reg)) - RC = MRI.getRegClass(Reg); - else - RC = getPhysRegClass(Reg); +unsigned SIRegisterInfo::getMaxNumSGPRs(const MachineFunction &MF) const { + const Function &F = *MF.getFunction(); + LLVMContext &Ctx = F.getContext(); + + const SIMachineFunctionInfo &MFI = *MF.getInfo(); + + // Compute maximum number of SGPRs function can use using default/requested + // minimum number of active waves per execution unit. + std::pair NumActiveWavesPerEU = + MFI.getNumActiveWavesPerEU(); + unsigned MaxNumSGPRs = getMaxNumSGPRs(NumActiveWavesPerEU.first); + // Check if maximum number of SGPRs was explicitly requested using + // "amdgpu-num-sgpr" attribute. + if (F.hasFnAttribute("amdgpu-num-sgpr")) { + unsigned Requested = + AMDGPU::getIntegerAttribute(F, "amdgpu-num-sgpr", MaxNumSGPRs); + // Make sure requested value does not violate subtarget's specifications. + if (Requested && Requested <= getReservedNumSGPRs()) { + Ctx.emitError("invalid amdgpu-num-sgpr: " + "requested number of SGPRs is not supported by the " + "subtarget (some number of SGPRs is required for internal " + "use)"); + Requested = 0; + } + // Make sure requested value is compatible with values implied by + // default/requested minimum/maximum number of active waves per execution + // unit. + if (Requested && Requested > getMaxNumSGPRs(NumActiveWavesPerEU.first)) { + Ctx.emitError("invalid amdgpu-num-sgpr: " + "requested number of SGPRs cannot be achieved with default " + "or requested minimum number of active waves per execution " + "unit"); + Requested = 0; + } + if (NumActiveWavesPerEU.second && + Requested && Requested < getMinNumSGPRs(NumActiveWavesPerEU.second)) { + Ctx.emitError("invalid amdgpu-num-sgpr: " + "requested number of SGPRs cannot be achieved with default " + "or requested maximum number of active waves per execution " + "unit"); + Requested = 0; + } + if (Requested) + MaxNumSGPRs = Requested; + } - return hasVGPRs(RC); + if (ST.hasSGPRInitBug()) + MaxNumSGPRs = AMDGPUSubtarget::FIXED_SGPR_COUNT_FOR_INIT_BUG; + + return MaxNumSGPRs - getReservedNumSGPRs(); +} + +unsigned SIRegisterInfo::getMinNumVGPRs(unsigned NumActiveWavesPerEU) const { + switch (NumActiveWavesPerEU) { + case 0: return 0; + case 10: return 0; + case 9: return 25; + case 8: return 29; + case 7: return 33; + case 6: return 37; + case 5: return 41; + case 4: return 49; + case 3: return 65; + case 2: return 85; + default: return 129; + } +} + +unsigned SIRegisterInfo::getMaxNumVGPRs(unsigned NumActiveWavesPerEU) const { + switch (NumActiveWavesPerEU) { + case 0: return 24; + case 10: return 24; + case 9: return 28; + case 8: return 32; + case 7: return 36; + case 6: return 40; + case 5: return 48; + case 4: return 64; + case 3: return 84; + case 2: return 128; + default: return getTotalNumVGPRs(); + } +} + +unsigned SIRegisterInfo::getMaxNumVGPRs(const MachineFunction &MF) const { + const Function &F = *MF.getFunction(); + LLVMContext &Ctx = F.getContext(); + + const SIMachineFunctionInfo &MFI = *MF.getInfo(); + + // Compute maximum number of VGPRs function can use using default/requested + // minimum number of active waves per execution unit. + std::pair NumActiveWavesPerEU = + MFI.getNumActiveWavesPerEU(); + unsigned MaxNumVGPRs = getMaxNumVGPRs(NumActiveWavesPerEU.first); + // Check if maximum number of VGPRs was explicitly requested using + // "amdgpu-num-vgpr" attribute. + if (F.hasFnAttribute("amdgpu-num-vgpr")) { + unsigned Requested = + AMDGPU::getIntegerAttribute(F, "amdgpu-num-vgpr", MaxNumVGPRs); + // Make sure requested value does not violate subtarget's specifications. + if (Requested && Requested <= getDebuggerReservedNumVGPRs()) { + Ctx.emitError("invalid amdgpu-num-vgpr: " + "requested number of VGPRs is not supported by the " + "subtarget (some number of VGPRs is required for debugger " + "use)"); + Requested = 0; + } + // Make sure requested value is compatible with values implied by + // default/requested minimum/maximum number of active waves per execution + // unit. + if (Requested && Requested > getMaxNumVGPRs(NumActiveWavesPerEU.first)) { + Ctx.emitError("invalid amdgpu-num-vgpr: " + "requested number of VGPRs cannot be achieved with default " + "or requested minimum number of active waves per execution " + "unit"); + Requested = 0; + } + if (NumActiveWavesPerEU.second && + Requested && Requested < getMinNumVGPRs(NumActiveWavesPerEU.second)) { + Ctx.emitError("invalid amdgpu-num-vgpr: " + "requested number of VGPRs cannot be achieved with default " + "or requested maximum number of active waves per execution " + "unit"); + Requested = 0; + } + if (Requested) + MaxNumVGPRs = Requested; + } + + return MaxNumVGPRs - getDebuggerReservedNumVGPRs(); } Index: lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h =================================================================== --- lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h +++ lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h @@ -45,9 +45,21 @@ bool isGlobalSegment(const GlobalValue *GV); bool isReadOnlySegment(const GlobalValue *GV); +/// Returns integer value requested using \p F's \p Name attribute. Returns \p +/// Default if attribute is not present. Returns \p Default and emits error if +/// requested value cannot be converted to integer. int getIntegerAttribute(const Function &F, StringRef Name, int Default); -unsigned getMaximumWorkGroupSize(const Function &F); +/// Returns a pair of integer values requested using \p F's \p Name attribute in +/// "first[,second]" format ("second" is optional unless \p OnlyFirstRequired is +/// false). Returns \p Default if attribute is not present. Returns \p Default +/// and emits error if one of the requested values cannot be converted to +/// integer, or \p OnlyFirstRequired is false and "second" value is not present. +std::pair getIntegerPairAttribute(const Function &F, + StringRef Name, + std::pair Default, + bool OnlyFirstRequired = false); + unsigned getInitialPSInputAddr(const Function &F); bool isShader(CallingConv::ID cc); Index: lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp =================================================================== --- lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp +++ lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp @@ -124,8 +124,29 @@ return Result; } -unsigned getMaximumWorkGroupSize(const Function &F) { - return getIntegerAttribute(F, "amdgpu-max-work-group-size", 256); +std::pair getIntegerPairAttribute(const Function &F, + StringRef Name, + std::pair Default, + bool OnlyFirstRequired) { + Attribute A = F.getFnAttribute(Name); + if (!A.isStringAttribute()) + return Default; + + LLVMContext &Ctx = F.getContext(); + std::pair Ints = Default; + std::pair Strs = A.getValueAsString().split(','); + if (Strs.first.trim().getAsInteger(0, Ints.first)) { + Ctx.emitError("can't parse first integer attribute " + Name); + return Default; + } + if (Strs.second.trim().getAsInteger(0, Ints.second)) { + if (!OnlyFirstRequired || Strs.second.trim().size()) { + Ctx.emitError("can't parse second integer attribute " + Name); + return Default; + } + } + + return Ints; } unsigned getInitialPSInputAddr(const Function &F) { Index: test/CodeGen/AMDGPU/amdgpu.private-memory.ll =================================================================== --- test/CodeGen/AMDGPU/amdgpu.private-memory.ll +++ test/CodeGen/AMDGPU/amdgpu.private-memory.ll @@ -527,4 +527,4 @@ ret void } -attributes #0 = { nounwind "amdgpu-max-waves-per-eu"="2" } +attributes #0 = { nounwind "amdgpu-num-active-waves-per-eu"="1,2" } Index: test/CodeGen/AMDGPU/array-ptr-calc-i32.ll =================================================================== --- test/CodeGen/AMDGPU/array-ptr-calc-i32.ll +++ test/CodeGen/AMDGPU/array-ptr-calc-i32.ll @@ -47,6 +47,6 @@ ret void } -attributes #0 = { nounwind "amdgpu-max-waves-per-eu"="1" } +attributes #0 = { nounwind "amdgpu-num-active-waves-per-eu"="1,1" } attributes #1 = { nounwind readnone } attributes #2 = { nounwind convergent } Index: test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size-invalid.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size-invalid.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size-invalid.ll @@ -0,0 +1,15 @@ +; RUN: not llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s 2>&1 | FileCheck %s + +; CHECK: invalid amdgpu-flat-work-group-size: minimum is greater than maximum +define void @invalid_0() #0 { +entry: + ret void +} +attributes #0 = {"amdgpu-flat-work-group-size"="128,64"} + +; CHECK: invalid amdgpu-flat-work-group-size: requested maximum flat work group size is not supported by the subtarget +define void @invalid_1() #1 { +entry: + ret void +} +attributes #1 = {"amdgpu-flat-work-group-size"="2048,4096"} Index: test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size-many-regs.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size-many-regs.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size-many-regs.ll @@ -0,0 +1,815 @@ +; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck %s + +; CHECK: SGPRBlocks: 1 +; CHECK: VGPRBlocks: 7 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 11 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 32 +define void @many_regs_128_256(i32 addrspace(1)* nocapture %A) #0 { +entry: + %a = alloca [111 x i32], align 4 + %0 = bitcast [111 x i32]* %a to i8* + call void @llvm.lifetime.start(i64 444, i8* %0) #2 + %1 = load i32, i32 addrspace(1)* %A, align 4, !tbaa !7 + %arrayidx1 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 0 + store i32 %1, i32* %arrayidx1, align 4, !tbaa !7 + %arrayidx.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 1 + %2 = load i32, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %arrayidx1.1 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 1 + store i32 %2, i32* %arrayidx1.1, align 4, !tbaa !7 + %arrayidx.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 2 + %3 = load i32, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %arrayidx1.2 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 2 + store i32 %3, i32* %arrayidx1.2, align 4, !tbaa !7 + %arrayidx.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 3 + %4 = load i32, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %arrayidx1.3 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 3 + store i32 %4, i32* %arrayidx1.3, align 4, !tbaa !7 + %arrayidx.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 4 + %5 = load i32, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %arrayidx1.4 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 4 + store i32 %5, i32* %arrayidx1.4, align 4, !tbaa !7 + %arrayidx.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 5 + %6 = load i32, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %arrayidx1.5 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 5 + store i32 %6, i32* %arrayidx1.5, align 4, !tbaa !7 + %arrayidx.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 6 + %7 = load i32, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %arrayidx1.6 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 6 + store i32 %7, i32* %arrayidx1.6, align 4, !tbaa !7 + %arrayidx.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 7 + %8 = load i32, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %arrayidx1.7 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 7 + store i32 %8, i32* %arrayidx1.7, align 4, !tbaa !7 + %arrayidx.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 8 + %9 = load i32, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %arrayidx1.8 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 8 + store i32 %9, i32* %arrayidx1.8, align 4, !tbaa !7 + %arrayidx.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 9 + %10 = load i32, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %arrayidx1.9 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 9 + store i32 %10, i32* %arrayidx1.9, align 4, !tbaa !7 + %arrayidx.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 10 + %11 = load i32, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %arrayidx1.10 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 10 + store i32 %11, i32* %arrayidx1.10, align 4, !tbaa !7 + %arrayidx.11 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 11 + %12 = load i32, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %arrayidx1.11 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 11 + store i32 %12, i32* %arrayidx1.11, align 4, !tbaa !7 + %arrayidx.12 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 12 + %13 = load i32, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %arrayidx1.12 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 12 + store i32 %13, i32* %arrayidx1.12, align 4, !tbaa !7 + %arrayidx.13 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 13 + %14 = load i32, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %arrayidx1.13 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 13 + store i32 %14, i32* %arrayidx1.13, align 4, !tbaa !7 + %arrayidx.14 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 14 + %15 = load i32, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %arrayidx1.14 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 14 + store i32 %15, i32* %arrayidx1.14, align 4, !tbaa !7 + %arrayidx.15 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 15 + %16 = load i32, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %arrayidx1.15 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 15 + store i32 %16, i32* %arrayidx1.15, align 4, !tbaa !7 + %arrayidx.16 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 16 + %17 = load i32, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %arrayidx1.16 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 16 + store i32 %17, i32* %arrayidx1.16, align 4, !tbaa !7 + %arrayidx.17 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 17 + %18 = load i32, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %arrayidx1.17 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 17 + store i32 %18, i32* %arrayidx1.17, align 4, !tbaa !7 + %arrayidx.18 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 18 + %19 = load i32, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %arrayidx1.18 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 18 + store i32 %19, i32* %arrayidx1.18, align 4, !tbaa !7 + %arrayidx.19 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 19 + %20 = load i32, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %arrayidx1.19 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 19 + store i32 %20, i32* %arrayidx1.19, align 4, !tbaa !7 + %arrayidx.20 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 20 + %21 = load i32, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %arrayidx1.20 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 20 + store i32 %21, i32* %arrayidx1.20, align 4, !tbaa !7 + %arrayidx.21 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 21 + %22 = load i32, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %arrayidx1.21 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 21 + store i32 %22, i32* %arrayidx1.21, align 4, !tbaa !7 + %arrayidx.22 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 22 + %23 = load i32, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %arrayidx1.22 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 22 + store i32 %23, i32* %arrayidx1.22, align 4, !tbaa !7 + %arrayidx.23 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 23 + %24 = load i32, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %arrayidx1.23 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 23 + store i32 %24, i32* %arrayidx1.23, align 4, !tbaa !7 + %arrayidx.24 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 24 + %25 = load i32, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %arrayidx1.24 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 24 + store i32 %25, i32* %arrayidx1.24, align 4, !tbaa !7 + %arrayidx.25 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 25 + %26 = load i32, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %arrayidx1.25 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 25 + store i32 %26, i32* %arrayidx1.25, align 4, !tbaa !7 + %arrayidx.26 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 26 + %27 = load i32, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %arrayidx1.26 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 26 + store i32 %27, i32* %arrayidx1.26, align 4, !tbaa !7 + %arrayidx.27 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 27 + %28 = load i32, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %arrayidx1.27 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 27 + store i32 %28, i32* %arrayidx1.27, align 4, !tbaa !7 + %arrayidx.28 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 28 + %29 = load i32, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %arrayidx1.28 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 28 + store i32 %29, i32* %arrayidx1.28, align 4, !tbaa !7 + %arrayidx.29 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 29 + %30 = load i32, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %arrayidx1.29 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 29 + store i32 %30, i32* %arrayidx1.29, align 4, !tbaa !7 + %arrayidx.30 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 30 + %31 = load i32, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %arrayidx1.30 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 30 + store i32 %31, i32* %arrayidx1.30, align 4, !tbaa !7 + %arrayidx.31 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 31 + %32 = load i32, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %arrayidx1.31 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 31 + store i32 %32, i32* %arrayidx1.31, align 4, !tbaa !7 + %arrayidx.32 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 32 + %33 = load i32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %arrayidx1.32 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 32 + store i32 %33, i32* %arrayidx1.32, align 4, !tbaa !7 + %arrayidx.33 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 33 + %34 = load i32, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %arrayidx1.33 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 33 + store i32 %34, i32* %arrayidx1.33, align 4, !tbaa !7 + %arrayidx.34 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 34 + %35 = load i32, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %arrayidx1.34 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 34 + store i32 %35, i32* %arrayidx1.34, align 4, !tbaa !7 + %arrayidx.35 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 35 + %36 = load i32, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %arrayidx1.35 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 35 + store i32 %36, i32* %arrayidx1.35, align 4, !tbaa !7 + %arrayidx.36 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 36 + %37 = load i32, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %arrayidx1.36 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 36 + store i32 %37, i32* %arrayidx1.36, align 4, !tbaa !7 + %arrayidx.37 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 37 + %38 = load i32, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %arrayidx1.37 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 37 + store i32 %38, i32* %arrayidx1.37, align 4, !tbaa !7 + %arrayidx.38 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 38 + %39 = load i32, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %arrayidx1.38 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 38 + store i32 %39, i32* %arrayidx1.38, align 4, !tbaa !7 + %arrayidx.39 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 39 + %40 = load i32, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %arrayidx1.39 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 39 + store i32 %40, i32* %arrayidx1.39, align 4, !tbaa !7 + %arrayidx.40 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 40 + %41 = load i32, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %arrayidx1.40 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 40 + store i32 %41, i32* %arrayidx1.40, align 4, !tbaa !7 + %arrayidx.41 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 41 + %42 = load i32, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %arrayidx1.41 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 41 + store i32 %42, i32* %arrayidx1.41, align 4, !tbaa !7 + %arrayidx.42 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 42 + %43 = load i32, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %arrayidx1.42 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 42 + store i32 %43, i32* %arrayidx1.42, align 4, !tbaa !7 + %arrayidx.43 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 43 + %44 = load i32, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %arrayidx1.43 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 43 + store i32 %44, i32* %arrayidx1.43, align 4, !tbaa !7 + %arrayidx.44 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 44 + %45 = load i32, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %arrayidx1.44 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 44 + store i32 %45, i32* %arrayidx1.44, align 4, !tbaa !7 + %arrayidx.45 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 45 + %46 = load i32, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %arrayidx1.45 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 45 + store i32 %46, i32* %arrayidx1.45, align 4, !tbaa !7 + %arrayidx.46 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 46 + %47 = load i32, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %arrayidx1.46 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 46 + store i32 %47, i32* %arrayidx1.46, align 4, !tbaa !7 + %arrayidx.47 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 47 + %48 = load i32, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %arrayidx1.47 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 47 + store i32 %48, i32* %arrayidx1.47, align 4, !tbaa !7 + %arrayidx.48 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 48 + %49 = load i32, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %arrayidx1.48 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 48 + store i32 %49, i32* %arrayidx1.48, align 4, !tbaa !7 + %arrayidx.49 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 49 + %50 = load i32, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %arrayidx1.49 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 49 + store i32 %50, i32* %arrayidx1.49, align 4, !tbaa !7 + %arrayidx.50 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 50 + %51 = load i32, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %arrayidx1.50 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 50 + store i32 %51, i32* %arrayidx1.50, align 4, !tbaa !7 + %arrayidx.51 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 51 + %52 = load i32, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %arrayidx1.51 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 51 + store i32 %52, i32* %arrayidx1.51, align 4, !tbaa !7 + %arrayidx.52 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 52 + %53 = load i32, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %arrayidx1.52 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 52 + store i32 %53, i32* %arrayidx1.52, align 4, !tbaa !7 + %arrayidx.53 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 53 + %54 = load i32, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %arrayidx1.53 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 53 + store i32 %54, i32* %arrayidx1.53, align 4, !tbaa !7 + %arrayidx.54 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 54 + %55 = load i32, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %arrayidx1.54 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 54 + store i32 %55, i32* %arrayidx1.54, align 4, !tbaa !7 + %arrayidx.55 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 55 + %56 = load i32, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %arrayidx1.55 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 55 + store i32 %56, i32* %arrayidx1.55, align 4, !tbaa !7 + %arrayidx.56 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 56 + %57 = load i32, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %arrayidx1.56 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 56 + store i32 %57, i32* %arrayidx1.56, align 4, !tbaa !7 + %arrayidx.57 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 57 + %58 = load i32, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %arrayidx1.57 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 57 + store i32 %58, i32* %arrayidx1.57, align 4, !tbaa !7 + %arrayidx.58 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 58 + %59 = load i32, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %arrayidx1.58 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 58 + store i32 %59, i32* %arrayidx1.58, align 4, !tbaa !7 + %arrayidx.59 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 59 + %60 = load i32, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %arrayidx1.59 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 59 + store i32 %60, i32* %arrayidx1.59, align 4, !tbaa !7 + %arrayidx.60 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 60 + %61 = load i32, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %arrayidx1.60 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 60 + store i32 %61, i32* %arrayidx1.60, align 4, !tbaa !7 + %arrayidx.61 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 61 + %62 = load i32, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %arrayidx1.61 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 61 + store i32 %62, i32* %arrayidx1.61, align 4, !tbaa !7 + %arrayidx.62 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 62 + %63 = load i32, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %arrayidx1.62 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 62 + store i32 %63, i32* %arrayidx1.62, align 4, !tbaa !7 + %arrayidx.63 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 63 + %64 = load i32, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %arrayidx1.63 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 63 + store i32 %64, i32* %arrayidx1.63, align 4, !tbaa !7 + %arrayidx.64 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 64 + %65 = load i32, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %arrayidx1.64 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 64 + store i32 %65, i32* %arrayidx1.64, align 4, !tbaa !7 + %arrayidx.65 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 65 + %66 = load i32, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %arrayidx1.65 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 65 + store i32 %66, i32* %arrayidx1.65, align 4, !tbaa !7 + %arrayidx.66 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 66 + %67 = load i32, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %arrayidx1.66 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 66 + store i32 %67, i32* %arrayidx1.66, align 4, !tbaa !7 + %arrayidx.67 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 67 + %68 = load i32, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %arrayidx1.67 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 67 + store i32 %68, i32* %arrayidx1.67, align 4, !tbaa !7 + %arrayidx.68 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 68 + %69 = load i32, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %arrayidx1.68 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 68 + store i32 %69, i32* %arrayidx1.68, align 4, !tbaa !7 + %arrayidx.69 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 69 + %70 = load i32, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %arrayidx1.69 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 69 + store i32 %70, i32* %arrayidx1.69, align 4, !tbaa !7 + %arrayidx.70 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 70 + %71 = load i32, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %arrayidx1.70 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 70 + store i32 %71, i32* %arrayidx1.70, align 4, !tbaa !7 + %arrayidx.71 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 71 + %72 = load i32, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %arrayidx1.71 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 71 + store i32 %72, i32* %arrayidx1.71, align 4, !tbaa !7 + %arrayidx.72 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 72 + %73 = load i32, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %arrayidx1.72 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 72 + store i32 %73, i32* %arrayidx1.72, align 4, !tbaa !7 + %arrayidx.73 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 73 + %74 = load i32, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %arrayidx1.73 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 73 + store i32 %74, i32* %arrayidx1.73, align 4, !tbaa !7 + %arrayidx.74 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 74 + %75 = load i32, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %arrayidx1.74 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 74 + store i32 %75, i32* %arrayidx1.74, align 4, !tbaa !7 + %arrayidx.75 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 75 + %76 = load i32, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %arrayidx1.75 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 75 + store i32 %76, i32* %arrayidx1.75, align 4, !tbaa !7 + %arrayidx.76 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 76 + %77 = load i32, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %arrayidx1.76 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 76 + store i32 %77, i32* %arrayidx1.76, align 4, !tbaa !7 + %arrayidx.77 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 77 + %78 = load i32, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %arrayidx1.77 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 77 + store i32 %78, i32* %arrayidx1.77, align 4, !tbaa !7 + %arrayidx.78 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 78 + %79 = load i32, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %arrayidx1.78 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 78 + store i32 %79, i32* %arrayidx1.78, align 4, !tbaa !7 + %arrayidx.79 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 79 + %80 = load i32, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %arrayidx1.79 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 79 + store i32 %80, i32* %arrayidx1.79, align 4, !tbaa !7 + %arrayidx.80 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 80 + %81 = load i32, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %arrayidx1.80 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 80 + store i32 %81, i32* %arrayidx1.80, align 4, !tbaa !7 + %arrayidx.81 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 81 + %82 = load i32, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %arrayidx1.81 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 81 + store i32 %82, i32* %arrayidx1.81, align 4, !tbaa !7 + %arrayidx.82 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 82 + %83 = load i32, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %arrayidx1.82 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 82 + store i32 %83, i32* %arrayidx1.82, align 4, !tbaa !7 + %arrayidx.83 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 83 + %84 = load i32, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %arrayidx1.83 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 83 + store i32 %84, i32* %arrayidx1.83, align 4, !tbaa !7 + %arrayidx.84 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 84 + %85 = load i32, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %arrayidx1.84 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 84 + store i32 %85, i32* %arrayidx1.84, align 4, !tbaa !7 + %arrayidx.85 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 85 + %86 = load i32, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %arrayidx1.85 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 85 + store i32 %86, i32* %arrayidx1.85, align 4, !tbaa !7 + %arrayidx.86 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 86 + %87 = load i32, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %arrayidx1.86 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 86 + store i32 %87, i32* %arrayidx1.86, align 4, !tbaa !7 + %arrayidx.87 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 87 + %88 = load i32, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %arrayidx1.87 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 87 + store i32 %88, i32* %arrayidx1.87, align 4, !tbaa !7 + %arrayidx.88 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 88 + %89 = load i32, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %arrayidx1.88 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 88 + store i32 %89, i32* %arrayidx1.88, align 4, !tbaa !7 + %arrayidx.89 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 89 + %90 = load i32, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %arrayidx1.89 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 89 + store i32 %90, i32* %arrayidx1.89, align 4, !tbaa !7 + %arrayidx.90 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 90 + %91 = load i32, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %arrayidx1.90 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 90 + store i32 %91, i32* %arrayidx1.90, align 4, !tbaa !7 + %arrayidx.91 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 91 + %92 = load i32, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %arrayidx1.91 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 91 + store i32 %92, i32* %arrayidx1.91, align 4, !tbaa !7 + %arrayidx.92 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 92 + %93 = load i32, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %arrayidx1.92 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 92 + store i32 %93, i32* %arrayidx1.92, align 4, !tbaa !7 + %arrayidx.93 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 93 + %94 = load i32, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %arrayidx1.93 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 93 + store i32 %94, i32* %arrayidx1.93, align 4, !tbaa !7 + %arrayidx.94 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 94 + %95 = load i32, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %arrayidx1.94 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 94 + store i32 %95, i32* %arrayidx1.94, align 4, !tbaa !7 + %arrayidx.95 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 95 + %96 = load i32, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %arrayidx1.95 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 95 + store i32 %96, i32* %arrayidx1.95, align 4, !tbaa !7 + %arrayidx.96 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 96 + %97 = load i32, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %arrayidx1.96 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 96 + store i32 %97, i32* %arrayidx1.96, align 4, !tbaa !7 + %arrayidx.97 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 97 + %98 = load i32, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %arrayidx1.97 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 97 + store i32 %98, i32* %arrayidx1.97, align 4, !tbaa !7 + %arrayidx.98 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 98 + %99 = load i32, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %arrayidx1.98 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 98 + store i32 %99, i32* %arrayidx1.98, align 4, !tbaa !7 + %arrayidx.99 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 99 + %100 = load i32, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %arrayidx1.99 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 99 + store i32 %100, i32* %arrayidx1.99, align 4, !tbaa !7 + %arrayidx.100 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 100 + %101 = load i32, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %arrayidx1.100 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 100 + store i32 %101, i32* %arrayidx1.100, align 4, !tbaa !7 + %arrayidx.101 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 101 + %102 = load i32, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %arrayidx1.101 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 101 + store i32 %102, i32* %arrayidx1.101, align 4, !tbaa !7 + %arrayidx.102 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 102 + %103 = load i32, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %arrayidx1.102 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 102 + store i32 %103, i32* %arrayidx1.102, align 4, !tbaa !7 + %arrayidx.103 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 103 + %104 = load i32, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %arrayidx1.103 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 103 + store i32 %104, i32* %arrayidx1.103, align 4, !tbaa !7 + %arrayidx.104 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 104 + %105 = load i32, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %arrayidx1.104 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 104 + store i32 %105, i32* %arrayidx1.104, align 4, !tbaa !7 + %arrayidx.105 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 105 + %106 = load i32, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %arrayidx1.105 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 105 + store i32 %106, i32* %arrayidx1.105, align 4, !tbaa !7 + %arrayidx.106 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 106 + %107 = load i32, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %arrayidx1.106 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 106 + store i32 %107, i32* %arrayidx1.106, align 4, !tbaa !7 + %arrayidx.107 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 107 + %108 = load i32, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %arrayidx1.107 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 107 + store i32 %108, i32* %arrayidx1.107, align 4, !tbaa !7 + %arrayidx.108 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 108 + %109 = load i32, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %arrayidx1.108 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 108 + store i32 %109, i32* %arrayidx1.108, align 4, !tbaa !7 + %arrayidx.109 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 109 + %110 = load i32, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %arrayidx1.109 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 109 + store i32 %110, i32* %arrayidx1.109, align 4, !tbaa !7 + %arrayidx.110 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 110 + %111 = load i32, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + %arrayidx1.110 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 110 + store i32 %111, i32* %arrayidx1.110, align 4, !tbaa !7 + %112 = load i32, i32* %arrayidx1, align 4, !tbaa !7 + %mul = sub nsw i32 0, %112 + store i32 %mul, i32 addrspace(1)* %A, align 4, !tbaa !7 + %113 = load i32, i32* %arrayidx1.1, align 4, !tbaa !7 + %mul.1 = sub nsw i32 0, %113 + store i32 %mul.1, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %114 = load i32, i32* %arrayidx1.2, align 4, !tbaa !7 + %mul.2 = sub nsw i32 0, %114 + store i32 %mul.2, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %115 = load i32, i32* %arrayidx1.3, align 4, !tbaa !7 + %mul.3 = sub nsw i32 0, %115 + store i32 %mul.3, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %116 = load i32, i32* %arrayidx1.4, align 4, !tbaa !7 + %mul.4 = sub nsw i32 0, %116 + store i32 %mul.4, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %117 = load i32, i32* %arrayidx1.5, align 4, !tbaa !7 + %mul.5 = sub nsw i32 0, %117 + store i32 %mul.5, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %118 = load i32, i32* %arrayidx1.6, align 4, !tbaa !7 + %mul.6 = sub nsw i32 0, %118 + store i32 %mul.6, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %119 = load i32, i32* %arrayidx1.7, align 4, !tbaa !7 + %mul.7 = sub nsw i32 0, %119 + store i32 %mul.7, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %120 = load i32, i32* %arrayidx1.8, align 4, !tbaa !7 + %mul.8 = sub nsw i32 0, %120 + store i32 %mul.8, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %121 = load i32, i32* %arrayidx1.9, align 4, !tbaa !7 + %mul.9 = sub nsw i32 0, %121 + store i32 %mul.9, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %122 = load i32, i32* %arrayidx1.10, align 4, !tbaa !7 + %mul.10 = sub nsw i32 0, %122 + store i32 %mul.10, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %123 = load i32, i32* %arrayidx1.11, align 4, !tbaa !7 + %mul.11 = sub nsw i32 0, %123 + store i32 %mul.11, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %124 = load i32, i32* %arrayidx1.12, align 4, !tbaa !7 + %mul.12 = sub nsw i32 0, %124 + store i32 %mul.12, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %125 = load i32, i32* %arrayidx1.13, align 4, !tbaa !7 + %mul.13 = sub nsw i32 0, %125 + store i32 %mul.13, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %126 = load i32, i32* %arrayidx1.14, align 4, !tbaa !7 + %mul.14 = sub nsw i32 0, %126 + store i32 %mul.14, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %127 = load i32, i32* %arrayidx1.15, align 4, !tbaa !7 + %mul.15 = sub nsw i32 0, %127 + store i32 %mul.15, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %128 = load i32, i32* %arrayidx1.16, align 4, !tbaa !7 + %mul.16 = sub nsw i32 0, %128 + store i32 %mul.16, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %129 = load i32, i32* %arrayidx1.17, align 4, !tbaa !7 + %mul.17 = sub nsw i32 0, %129 + store i32 %mul.17, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %130 = load i32, i32* %arrayidx1.18, align 4, !tbaa !7 + %mul.18 = sub nsw i32 0, %130 + store i32 %mul.18, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %131 = load i32, i32* %arrayidx1.19, align 4, !tbaa !7 + %mul.19 = sub nsw i32 0, %131 + store i32 %mul.19, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %132 = load i32, i32* %arrayidx1.20, align 4, !tbaa !7 + %mul.20 = sub nsw i32 0, %132 + store i32 %mul.20, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %133 = load i32, i32* %arrayidx1.21, align 4, !tbaa !7 + %mul.21 = sub nsw i32 0, %133 + store i32 %mul.21, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %134 = load i32, i32* %arrayidx1.22, align 4, !tbaa !7 + %mul.22 = sub nsw i32 0, %134 + store i32 %mul.22, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %135 = load i32, i32* %arrayidx1.23, align 4, !tbaa !7 + %mul.23 = sub nsw i32 0, %135 + store i32 %mul.23, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %136 = load i32, i32* %arrayidx1.24, align 4, !tbaa !7 + %mul.24 = sub nsw i32 0, %136 + store i32 %mul.24, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %137 = load i32, i32* %arrayidx1.25, align 4, !tbaa !7 + %mul.25 = sub nsw i32 0, %137 + store i32 %mul.25, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %138 = load i32, i32* %arrayidx1.26, align 4, !tbaa !7 + %mul.26 = sub nsw i32 0, %138 + store i32 %mul.26, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %139 = load i32, i32* %arrayidx1.27, align 4, !tbaa !7 + %mul.27 = sub nsw i32 0, %139 + store i32 %mul.27, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %140 = load i32, i32* %arrayidx1.28, align 4, !tbaa !7 + %mul.28 = sub nsw i32 0, %140 + store i32 %mul.28, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %141 = load i32, i32* %arrayidx1.29, align 4, !tbaa !7 + %mul.29 = sub nsw i32 0, %141 + store i32 %mul.29, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %142 = load i32, i32* %arrayidx1.30, align 4, !tbaa !7 + %mul.30 = sub nsw i32 0, %142 + store i32 %mul.30, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %143 = load i32, i32* %arrayidx1.31, align 4, !tbaa !7 + %mul.31 = sub nsw i32 0, %143 + store i32 %mul.31, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %144 = load i32, i32* %arrayidx1.32, align 4, !tbaa !7 + %mul.32 = sub nsw i32 0, %144 + store i32 %mul.32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %145 = load i32, i32* %arrayidx1.33, align 4, !tbaa !7 + %mul.33 = sub nsw i32 0, %145 + store i32 %mul.33, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %146 = load i32, i32* %arrayidx1.34, align 4, !tbaa !7 + %mul.34 = sub nsw i32 0, %146 + store i32 %mul.34, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %147 = load i32, i32* %arrayidx1.35, align 4, !tbaa !7 + %mul.35 = sub nsw i32 0, %147 + store i32 %mul.35, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %148 = load i32, i32* %arrayidx1.36, align 4, !tbaa !7 + %mul.36 = sub nsw i32 0, %148 + store i32 %mul.36, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %149 = load i32, i32* %arrayidx1.37, align 4, !tbaa !7 + %mul.37 = sub nsw i32 0, %149 + store i32 %mul.37, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %150 = load i32, i32* %arrayidx1.38, align 4, !tbaa !7 + %mul.38 = sub nsw i32 0, %150 + store i32 %mul.38, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %151 = load i32, i32* %arrayidx1.39, align 4, !tbaa !7 + %mul.39 = sub nsw i32 0, %151 + store i32 %mul.39, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %152 = load i32, i32* %arrayidx1.40, align 4, !tbaa !7 + %mul.40 = sub nsw i32 0, %152 + store i32 %mul.40, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %153 = load i32, i32* %arrayidx1.41, align 4, !tbaa !7 + %mul.41 = sub nsw i32 0, %153 + store i32 %mul.41, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %154 = load i32, i32* %arrayidx1.42, align 4, !tbaa !7 + %mul.42 = sub nsw i32 0, %154 + store i32 %mul.42, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %155 = load i32, i32* %arrayidx1.43, align 4, !tbaa !7 + %mul.43 = sub nsw i32 0, %155 + store i32 %mul.43, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %156 = load i32, i32* %arrayidx1.44, align 4, !tbaa !7 + %mul.44 = sub nsw i32 0, %156 + store i32 %mul.44, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %157 = load i32, i32* %arrayidx1.45, align 4, !tbaa !7 + %mul.45 = sub nsw i32 0, %157 + store i32 %mul.45, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %158 = load i32, i32* %arrayidx1.46, align 4, !tbaa !7 + %mul.46 = sub nsw i32 0, %158 + store i32 %mul.46, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %159 = load i32, i32* %arrayidx1.47, align 4, !tbaa !7 + %mul.47 = sub nsw i32 0, %159 + store i32 %mul.47, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %160 = load i32, i32* %arrayidx1.48, align 4, !tbaa !7 + %mul.48 = sub nsw i32 0, %160 + store i32 %mul.48, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %161 = load i32, i32* %arrayidx1.49, align 4, !tbaa !7 + %mul.49 = sub nsw i32 0, %161 + store i32 %mul.49, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %162 = load i32, i32* %arrayidx1.50, align 4, !tbaa !7 + %mul.50 = sub nsw i32 0, %162 + store i32 %mul.50, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %163 = load i32, i32* %arrayidx1.51, align 4, !tbaa !7 + %mul.51 = sub nsw i32 0, %163 + store i32 %mul.51, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %164 = load i32, i32* %arrayidx1.52, align 4, !tbaa !7 + %mul.52 = sub nsw i32 0, %164 + store i32 %mul.52, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %165 = load i32, i32* %arrayidx1.53, align 4, !tbaa !7 + %mul.53 = sub nsw i32 0, %165 + store i32 %mul.53, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %166 = load i32, i32* %arrayidx1.54, align 4, !tbaa !7 + %mul.54 = sub nsw i32 0, %166 + store i32 %mul.54, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %167 = load i32, i32* %arrayidx1.55, align 4, !tbaa !7 + %mul.55 = sub nsw i32 0, %167 + store i32 %mul.55, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %168 = load i32, i32* %arrayidx1.56, align 4, !tbaa !7 + %mul.56 = sub nsw i32 0, %168 + store i32 %mul.56, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %169 = load i32, i32* %arrayidx1.57, align 4, !tbaa !7 + %mul.57 = sub nsw i32 0, %169 + store i32 %mul.57, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %170 = load i32, i32* %arrayidx1.58, align 4, !tbaa !7 + %mul.58 = sub nsw i32 0, %170 + store i32 %mul.58, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %171 = load i32, i32* %arrayidx1.59, align 4, !tbaa !7 + %mul.59 = sub nsw i32 0, %171 + store i32 %mul.59, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %172 = load i32, i32* %arrayidx1.60, align 4, !tbaa !7 + %mul.60 = sub nsw i32 0, %172 + store i32 %mul.60, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %173 = load i32, i32* %arrayidx1.61, align 4, !tbaa !7 + %mul.61 = sub nsw i32 0, %173 + store i32 %mul.61, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %174 = load i32, i32* %arrayidx1.62, align 4, !tbaa !7 + %mul.62 = sub nsw i32 0, %174 + store i32 %mul.62, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %175 = load i32, i32* %arrayidx1.63, align 4, !tbaa !7 + %mul.63 = sub nsw i32 0, %175 + store i32 %mul.63, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %176 = load i32, i32* %arrayidx1.64, align 4, !tbaa !7 + %mul.64 = sub nsw i32 0, %176 + store i32 %mul.64, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %177 = load i32, i32* %arrayidx1.65, align 4, !tbaa !7 + %mul.65 = sub nsw i32 0, %177 + store i32 %mul.65, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %178 = load i32, i32* %arrayidx1.66, align 4, !tbaa !7 + %mul.66 = sub nsw i32 0, %178 + store i32 %mul.66, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %179 = load i32, i32* %arrayidx1.67, align 4, !tbaa !7 + %mul.67 = sub nsw i32 0, %179 + store i32 %mul.67, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %180 = load i32, i32* %arrayidx1.68, align 4, !tbaa !7 + %mul.68 = sub nsw i32 0, %180 + store i32 %mul.68, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %181 = load i32, i32* %arrayidx1.69, align 4, !tbaa !7 + %mul.69 = sub nsw i32 0, %181 + store i32 %mul.69, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %182 = load i32, i32* %arrayidx1.70, align 4, !tbaa !7 + %mul.70 = sub nsw i32 0, %182 + store i32 %mul.70, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %183 = load i32, i32* %arrayidx1.71, align 4, !tbaa !7 + %mul.71 = sub nsw i32 0, %183 + store i32 %mul.71, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %184 = load i32, i32* %arrayidx1.72, align 4, !tbaa !7 + %mul.72 = sub nsw i32 0, %184 + store i32 %mul.72, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %185 = load i32, i32* %arrayidx1.73, align 4, !tbaa !7 + %mul.73 = sub nsw i32 0, %185 + store i32 %mul.73, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %186 = load i32, i32* %arrayidx1.74, align 4, !tbaa !7 + %mul.74 = sub nsw i32 0, %186 + store i32 %mul.74, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %187 = load i32, i32* %arrayidx1.75, align 4, !tbaa !7 + %mul.75 = sub nsw i32 0, %187 + store i32 %mul.75, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %188 = load i32, i32* %arrayidx1.76, align 4, !tbaa !7 + %mul.76 = sub nsw i32 0, %188 + store i32 %mul.76, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %189 = load i32, i32* %arrayidx1.77, align 4, !tbaa !7 + %mul.77 = sub nsw i32 0, %189 + store i32 %mul.77, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %190 = load i32, i32* %arrayidx1.78, align 4, !tbaa !7 + %mul.78 = sub nsw i32 0, %190 + store i32 %mul.78, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %191 = load i32, i32* %arrayidx1.79, align 4, !tbaa !7 + %mul.79 = sub nsw i32 0, %191 + store i32 %mul.79, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %192 = load i32, i32* %arrayidx1.80, align 4, !tbaa !7 + %mul.80 = sub nsw i32 0, %192 + store i32 %mul.80, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %193 = load i32, i32* %arrayidx1.81, align 4, !tbaa !7 + %mul.81 = sub nsw i32 0, %193 + store i32 %mul.81, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %194 = load i32, i32* %arrayidx1.82, align 4, !tbaa !7 + %mul.82 = sub nsw i32 0, %194 + store i32 %mul.82, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %195 = load i32, i32* %arrayidx1.83, align 4, !tbaa !7 + %mul.83 = sub nsw i32 0, %195 + store i32 %mul.83, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %196 = load i32, i32* %arrayidx1.84, align 4, !tbaa !7 + %mul.84 = sub nsw i32 0, %196 + store i32 %mul.84, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %197 = load i32, i32* %arrayidx1.85, align 4, !tbaa !7 + %mul.85 = sub nsw i32 0, %197 + store i32 %mul.85, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %198 = load i32, i32* %arrayidx1.86, align 4, !tbaa !7 + %mul.86 = sub nsw i32 0, %198 + store i32 %mul.86, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %199 = load i32, i32* %arrayidx1.87, align 4, !tbaa !7 + %mul.87 = sub nsw i32 0, %199 + store i32 %mul.87, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %200 = load i32, i32* %arrayidx1.88, align 4, !tbaa !7 + %mul.88 = sub nsw i32 0, %200 + store i32 %mul.88, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %201 = load i32, i32* %arrayidx1.89, align 4, !tbaa !7 + %mul.89 = sub nsw i32 0, %201 + store i32 %mul.89, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %202 = load i32, i32* %arrayidx1.90, align 4, !tbaa !7 + %mul.90 = sub nsw i32 0, %202 + store i32 %mul.90, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %203 = load i32, i32* %arrayidx1.91, align 4, !tbaa !7 + %mul.91 = sub nsw i32 0, %203 + store i32 %mul.91, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %204 = load i32, i32* %arrayidx1.92, align 4, !tbaa !7 + %mul.92 = sub nsw i32 0, %204 + store i32 %mul.92, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %205 = load i32, i32* %arrayidx1.93, align 4, !tbaa !7 + %mul.93 = sub nsw i32 0, %205 + store i32 %mul.93, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %206 = load i32, i32* %arrayidx1.94, align 4, !tbaa !7 + %mul.94 = sub nsw i32 0, %206 + store i32 %mul.94, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %207 = load i32, i32* %arrayidx1.95, align 4, !tbaa !7 + %mul.95 = sub nsw i32 0, %207 + store i32 %mul.95, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %208 = load i32, i32* %arrayidx1.96, align 4, !tbaa !7 + %mul.96 = sub nsw i32 0, %208 + store i32 %mul.96, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %209 = load i32, i32* %arrayidx1.97, align 4, !tbaa !7 + %mul.97 = sub nsw i32 0, %209 + store i32 %mul.97, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %210 = load i32, i32* %arrayidx1.98, align 4, !tbaa !7 + %mul.98 = sub nsw i32 0, %210 + store i32 %mul.98, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %211 = load i32, i32* %arrayidx1.99, align 4, !tbaa !7 + %mul.99 = sub nsw i32 0, %211 + store i32 %mul.99, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %212 = load i32, i32* %arrayidx1.100, align 4, !tbaa !7 + %mul.100 = sub nsw i32 0, %212 + store i32 %mul.100, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %213 = load i32, i32* %arrayidx1.101, align 4, !tbaa !7 + %mul.101 = sub nsw i32 0, %213 + store i32 %mul.101, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %214 = load i32, i32* %arrayidx1.102, align 4, !tbaa !7 + %mul.102 = sub nsw i32 0, %214 + store i32 %mul.102, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %215 = load i32, i32* %arrayidx1.103, align 4, !tbaa !7 + %mul.103 = sub nsw i32 0, %215 + store i32 %mul.103, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %216 = load i32, i32* %arrayidx1.104, align 4, !tbaa !7 + %mul.104 = sub nsw i32 0, %216 + store i32 %mul.104, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %217 = load i32, i32* %arrayidx1.105, align 4, !tbaa !7 + %mul.105 = sub nsw i32 0, %217 + store i32 %mul.105, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %218 = load i32, i32* %arrayidx1.106, align 4, !tbaa !7 + %mul.106 = sub nsw i32 0, %218 + store i32 %mul.106, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %219 = load i32, i32* %arrayidx1.107, align 4, !tbaa !7 + %mul.107 = sub nsw i32 0, %219 + store i32 %mul.107, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %220 = load i32, i32* %arrayidx1.108, align 4, !tbaa !7 + %mul.108 = sub nsw i32 0, %220 + store i32 %mul.108, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %221 = load i32, i32* %arrayidx1.109, align 4, !tbaa !7 + %mul.109 = sub nsw i32 0, %221 + store i32 %mul.109, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %222 = load i32, i32* %arrayidx1.110, align 4, !tbaa !7 + %mul.110 = sub nsw i32 0, %222 + store i32 %mul.110, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + call void @llvm.lifetime.end(i64 444, i8* %0) #2 + ret void +} + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.start(i64, i8* nocapture) #1 + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.end(i64, i8* nocapture) #1 + +attributes #0 = { nounwind "amdgpu-flat-work-group-size"="128,256" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="fiji" "target-features"="+16-bit-insts,+s-memrealtime" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { argmemonly nounwind } +attributes #2 = { nounwind } + +!opencl.kernels = !{!0} +!llvm.ident = !{!6} + +!0 = !{void (i32 addrspace(1)*)* @many_regs_128_256, !1, !2, !3, !4, !5} +!1 = !{!"kernel_arg_addr_space", i32 1} +!2 = !{!"kernel_arg_access_qual", !"none"} +!3 = !{!"kernel_arg_type", !"int*"} +!4 = !{!"kernel_arg_base_type", !"int*"} +!5 = !{!"kernel_arg_type_qual", !""} +!6 = !{!"clang version 3.9.0 (trunk 272684)"} +!7 = !{!8, !8, i64 0} +!8 = !{!"int", !9, i64 0} +!9 = !{!"omnipotent char", !10, i64 0} +!10 = !{!"Simple C/C++ TBAA"} Index: test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-flat-work-group-size.ll @@ -0,0 +1,31 @@ +; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck %s + +; CHECK: SGPRBlocks: 0 +; CHECK: VGPRBlocks: 0 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 1 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 1 +define void @empty_64_64() #0 { +entry: + ret void +} +attributes #0 = {"amdgpu-flat-work-group-size"="64,64"} + +; CHECK: SGPRBlocks: 0 +; CHECK: VGPRBlocks: 0 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 1 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 1 +define void @empty_64_128() #1 { +entry: + ret void +} +attributes #1 = {"amdgpu-flat-work-group-size"="64,128"} + +; CHECK: SGPRBlocks: 10 +; CHECK: VGPRBlocks: 7 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 81 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 29 +define void @empty_128_128() #2 { +entry: + ret void +} +attributes #2 = {"amdgpu-flat-work-group-size"="128,128"} Index: test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu-invalid.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu-invalid.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu-invalid.ll @@ -0,0 +1,29 @@ +; RUN: not llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s 2>&1 | FileCheck %s + +; CHECK: invalid amdgpu-num-active-waves-per-eu: minimum is greater than maximum +define void @invalid_0() #0 { +entry: + ret void +} +attributes #0 = {"amdgpu-num-active-waves-per-eu"="10,1"} + +; CHECK: invalid amdgpu-num-active-waves-per-eu: requested minimum number of active waves per execution unit is not supported by the subtarget +define void @invalid_1() #1 { +entry: + ret void +} +attributes #1 = {"amdgpu-num-active-waves-per-eu"="20"} + +; CHECK: invalid amdgpu-num-active-waves-per-eu: requested maximum number of active waves per execution unit is not supported by the subtarget +define void @invalid_2() #2 { +entry: + ret void +} +attributes #2 = {"amdgpu-num-active-waves-per-eu"="1,20"} + +; CHECK: invalid amdgpu-num-active-waves-per-eu: requested number of active waves per execution unit cannot be achieved with default or requested flat work group sizes +define void @invalid_3() #3 { +entry: + ret void +} +attributes #3 = {"amdgpu-num-active-waves-per-eu"="10,10" "amdgpu-flat-work-group-size"="128,128"} Index: test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu-many-regs.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu-many-regs.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu-many-regs.ll @@ -0,0 +1,2396 @@ +; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck %s + +; Exactly 1 active wave per execution unit. +; CHECK: SGPRBlocks: 12 +; CHECK: VGPRBlocks: 32 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 97 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 129 +define void @many_regs_exactly_1(i32 addrspace(1)* nocapture %A) #0 { +entry: + %a = alloca [111 x i32], align 4 + %0 = bitcast [111 x i32]* %a to i8* + call void @llvm.lifetime.start(i64 444, i8* %0) #2 + %1 = load i32, i32 addrspace(1)* %A, align 4, !tbaa !7 + %arrayidx1 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 0 + store i32 %1, i32* %arrayidx1, align 4, !tbaa !7 + %arrayidx.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 1 + %2 = load i32, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %arrayidx1.1 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 1 + store i32 %2, i32* %arrayidx1.1, align 4, !tbaa !7 + %arrayidx.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 2 + %3 = load i32, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %arrayidx1.2 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 2 + store i32 %3, i32* %arrayidx1.2, align 4, !tbaa !7 + %arrayidx.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 3 + %4 = load i32, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %arrayidx1.3 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 3 + store i32 %4, i32* %arrayidx1.3, align 4, !tbaa !7 + %arrayidx.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 4 + %5 = load i32, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %arrayidx1.4 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 4 + store i32 %5, i32* %arrayidx1.4, align 4, !tbaa !7 + %arrayidx.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 5 + %6 = load i32, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %arrayidx1.5 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 5 + store i32 %6, i32* %arrayidx1.5, align 4, !tbaa !7 + %arrayidx.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 6 + %7 = load i32, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %arrayidx1.6 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 6 + store i32 %7, i32* %arrayidx1.6, align 4, !tbaa !7 + %arrayidx.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 7 + %8 = load i32, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %arrayidx1.7 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 7 + store i32 %8, i32* %arrayidx1.7, align 4, !tbaa !7 + %arrayidx.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 8 + %9 = load i32, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %arrayidx1.8 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 8 + store i32 %9, i32* %arrayidx1.8, align 4, !tbaa !7 + %arrayidx.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 9 + %10 = load i32, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %arrayidx1.9 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 9 + store i32 %10, i32* %arrayidx1.9, align 4, !tbaa !7 + %arrayidx.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 10 + %11 = load i32, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %arrayidx1.10 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 10 + store i32 %11, i32* %arrayidx1.10, align 4, !tbaa !7 + %arrayidx.11 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 11 + %12 = load i32, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %arrayidx1.11 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 11 + store i32 %12, i32* %arrayidx1.11, align 4, !tbaa !7 + %arrayidx.12 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 12 + %13 = load i32, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %arrayidx1.12 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 12 + store i32 %13, i32* %arrayidx1.12, align 4, !tbaa !7 + %arrayidx.13 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 13 + %14 = load i32, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %arrayidx1.13 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 13 + store i32 %14, i32* %arrayidx1.13, align 4, !tbaa !7 + %arrayidx.14 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 14 + %15 = load i32, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %arrayidx1.14 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 14 + store i32 %15, i32* %arrayidx1.14, align 4, !tbaa !7 + %arrayidx.15 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 15 + %16 = load i32, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %arrayidx1.15 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 15 + store i32 %16, i32* %arrayidx1.15, align 4, !tbaa !7 + %arrayidx.16 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 16 + %17 = load i32, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %arrayidx1.16 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 16 + store i32 %17, i32* %arrayidx1.16, align 4, !tbaa !7 + %arrayidx.17 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 17 + %18 = load i32, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %arrayidx1.17 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 17 + store i32 %18, i32* %arrayidx1.17, align 4, !tbaa !7 + %arrayidx.18 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 18 + %19 = load i32, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %arrayidx1.18 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 18 + store i32 %19, i32* %arrayidx1.18, align 4, !tbaa !7 + %arrayidx.19 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 19 + %20 = load i32, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %arrayidx1.19 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 19 + store i32 %20, i32* %arrayidx1.19, align 4, !tbaa !7 + %arrayidx.20 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 20 + %21 = load i32, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %arrayidx1.20 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 20 + store i32 %21, i32* %arrayidx1.20, align 4, !tbaa !7 + %arrayidx.21 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 21 + %22 = load i32, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %arrayidx1.21 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 21 + store i32 %22, i32* %arrayidx1.21, align 4, !tbaa !7 + %arrayidx.22 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 22 + %23 = load i32, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %arrayidx1.22 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 22 + store i32 %23, i32* %arrayidx1.22, align 4, !tbaa !7 + %arrayidx.23 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 23 + %24 = load i32, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %arrayidx1.23 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 23 + store i32 %24, i32* %arrayidx1.23, align 4, !tbaa !7 + %arrayidx.24 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 24 + %25 = load i32, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %arrayidx1.24 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 24 + store i32 %25, i32* %arrayidx1.24, align 4, !tbaa !7 + %arrayidx.25 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 25 + %26 = load i32, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %arrayidx1.25 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 25 + store i32 %26, i32* %arrayidx1.25, align 4, !tbaa !7 + %arrayidx.26 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 26 + %27 = load i32, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %arrayidx1.26 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 26 + store i32 %27, i32* %arrayidx1.26, align 4, !tbaa !7 + %arrayidx.27 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 27 + %28 = load i32, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %arrayidx1.27 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 27 + store i32 %28, i32* %arrayidx1.27, align 4, !tbaa !7 + %arrayidx.28 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 28 + %29 = load i32, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %arrayidx1.28 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 28 + store i32 %29, i32* %arrayidx1.28, align 4, !tbaa !7 + %arrayidx.29 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 29 + %30 = load i32, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %arrayidx1.29 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 29 + store i32 %30, i32* %arrayidx1.29, align 4, !tbaa !7 + %arrayidx.30 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 30 + %31 = load i32, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %arrayidx1.30 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 30 + store i32 %31, i32* %arrayidx1.30, align 4, !tbaa !7 + %arrayidx.31 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 31 + %32 = load i32, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %arrayidx1.31 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 31 + store i32 %32, i32* %arrayidx1.31, align 4, !tbaa !7 + %arrayidx.32 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 32 + %33 = load i32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %arrayidx1.32 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 32 + store i32 %33, i32* %arrayidx1.32, align 4, !tbaa !7 + %arrayidx.33 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 33 + %34 = load i32, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %arrayidx1.33 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 33 + store i32 %34, i32* %arrayidx1.33, align 4, !tbaa !7 + %arrayidx.34 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 34 + %35 = load i32, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %arrayidx1.34 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 34 + store i32 %35, i32* %arrayidx1.34, align 4, !tbaa !7 + %arrayidx.35 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 35 + %36 = load i32, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %arrayidx1.35 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 35 + store i32 %36, i32* %arrayidx1.35, align 4, !tbaa !7 + %arrayidx.36 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 36 + %37 = load i32, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %arrayidx1.36 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 36 + store i32 %37, i32* %arrayidx1.36, align 4, !tbaa !7 + %arrayidx.37 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 37 + %38 = load i32, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %arrayidx1.37 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 37 + store i32 %38, i32* %arrayidx1.37, align 4, !tbaa !7 + %arrayidx.38 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 38 + %39 = load i32, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %arrayidx1.38 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 38 + store i32 %39, i32* %arrayidx1.38, align 4, !tbaa !7 + %arrayidx.39 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 39 + %40 = load i32, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %arrayidx1.39 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 39 + store i32 %40, i32* %arrayidx1.39, align 4, !tbaa !7 + %arrayidx.40 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 40 + %41 = load i32, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %arrayidx1.40 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 40 + store i32 %41, i32* %arrayidx1.40, align 4, !tbaa !7 + %arrayidx.41 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 41 + %42 = load i32, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %arrayidx1.41 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 41 + store i32 %42, i32* %arrayidx1.41, align 4, !tbaa !7 + %arrayidx.42 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 42 + %43 = load i32, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %arrayidx1.42 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 42 + store i32 %43, i32* %arrayidx1.42, align 4, !tbaa !7 + %arrayidx.43 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 43 + %44 = load i32, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %arrayidx1.43 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 43 + store i32 %44, i32* %arrayidx1.43, align 4, !tbaa !7 + %arrayidx.44 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 44 + %45 = load i32, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %arrayidx1.44 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 44 + store i32 %45, i32* %arrayidx1.44, align 4, !tbaa !7 + %arrayidx.45 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 45 + %46 = load i32, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %arrayidx1.45 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 45 + store i32 %46, i32* %arrayidx1.45, align 4, !tbaa !7 + %arrayidx.46 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 46 + %47 = load i32, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %arrayidx1.46 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 46 + store i32 %47, i32* %arrayidx1.46, align 4, !tbaa !7 + %arrayidx.47 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 47 + %48 = load i32, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %arrayidx1.47 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 47 + store i32 %48, i32* %arrayidx1.47, align 4, !tbaa !7 + %arrayidx.48 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 48 + %49 = load i32, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %arrayidx1.48 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 48 + store i32 %49, i32* %arrayidx1.48, align 4, !tbaa !7 + %arrayidx.49 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 49 + %50 = load i32, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %arrayidx1.49 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 49 + store i32 %50, i32* %arrayidx1.49, align 4, !tbaa !7 + %arrayidx.50 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 50 + %51 = load i32, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %arrayidx1.50 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 50 + store i32 %51, i32* %arrayidx1.50, align 4, !tbaa !7 + %arrayidx.51 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 51 + %52 = load i32, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %arrayidx1.51 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 51 + store i32 %52, i32* %arrayidx1.51, align 4, !tbaa !7 + %arrayidx.52 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 52 + %53 = load i32, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %arrayidx1.52 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 52 + store i32 %53, i32* %arrayidx1.52, align 4, !tbaa !7 + %arrayidx.53 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 53 + %54 = load i32, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %arrayidx1.53 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 53 + store i32 %54, i32* %arrayidx1.53, align 4, !tbaa !7 + %arrayidx.54 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 54 + %55 = load i32, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %arrayidx1.54 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 54 + store i32 %55, i32* %arrayidx1.54, align 4, !tbaa !7 + %arrayidx.55 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 55 + %56 = load i32, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %arrayidx1.55 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 55 + store i32 %56, i32* %arrayidx1.55, align 4, !tbaa !7 + %arrayidx.56 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 56 + %57 = load i32, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %arrayidx1.56 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 56 + store i32 %57, i32* %arrayidx1.56, align 4, !tbaa !7 + %arrayidx.57 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 57 + %58 = load i32, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %arrayidx1.57 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 57 + store i32 %58, i32* %arrayidx1.57, align 4, !tbaa !7 + %arrayidx.58 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 58 + %59 = load i32, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %arrayidx1.58 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 58 + store i32 %59, i32* %arrayidx1.58, align 4, !tbaa !7 + %arrayidx.59 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 59 + %60 = load i32, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %arrayidx1.59 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 59 + store i32 %60, i32* %arrayidx1.59, align 4, !tbaa !7 + %arrayidx.60 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 60 + %61 = load i32, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %arrayidx1.60 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 60 + store i32 %61, i32* %arrayidx1.60, align 4, !tbaa !7 + %arrayidx.61 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 61 + %62 = load i32, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %arrayidx1.61 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 61 + store i32 %62, i32* %arrayidx1.61, align 4, !tbaa !7 + %arrayidx.62 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 62 + %63 = load i32, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %arrayidx1.62 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 62 + store i32 %63, i32* %arrayidx1.62, align 4, !tbaa !7 + %arrayidx.63 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 63 + %64 = load i32, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %arrayidx1.63 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 63 + store i32 %64, i32* %arrayidx1.63, align 4, !tbaa !7 + %arrayidx.64 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 64 + %65 = load i32, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %arrayidx1.64 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 64 + store i32 %65, i32* %arrayidx1.64, align 4, !tbaa !7 + %arrayidx.65 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 65 + %66 = load i32, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %arrayidx1.65 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 65 + store i32 %66, i32* %arrayidx1.65, align 4, !tbaa !7 + %arrayidx.66 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 66 + %67 = load i32, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %arrayidx1.66 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 66 + store i32 %67, i32* %arrayidx1.66, align 4, !tbaa !7 + %arrayidx.67 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 67 + %68 = load i32, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %arrayidx1.67 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 67 + store i32 %68, i32* %arrayidx1.67, align 4, !tbaa !7 + %arrayidx.68 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 68 + %69 = load i32, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %arrayidx1.68 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 68 + store i32 %69, i32* %arrayidx1.68, align 4, !tbaa !7 + %arrayidx.69 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 69 + %70 = load i32, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %arrayidx1.69 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 69 + store i32 %70, i32* %arrayidx1.69, align 4, !tbaa !7 + %arrayidx.70 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 70 + %71 = load i32, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %arrayidx1.70 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 70 + store i32 %71, i32* %arrayidx1.70, align 4, !tbaa !7 + %arrayidx.71 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 71 + %72 = load i32, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %arrayidx1.71 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 71 + store i32 %72, i32* %arrayidx1.71, align 4, !tbaa !7 + %arrayidx.72 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 72 + %73 = load i32, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %arrayidx1.72 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 72 + store i32 %73, i32* %arrayidx1.72, align 4, !tbaa !7 + %arrayidx.73 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 73 + %74 = load i32, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %arrayidx1.73 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 73 + store i32 %74, i32* %arrayidx1.73, align 4, !tbaa !7 + %arrayidx.74 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 74 + %75 = load i32, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %arrayidx1.74 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 74 + store i32 %75, i32* %arrayidx1.74, align 4, !tbaa !7 + %arrayidx.75 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 75 + %76 = load i32, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %arrayidx1.75 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 75 + store i32 %76, i32* %arrayidx1.75, align 4, !tbaa !7 + %arrayidx.76 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 76 + %77 = load i32, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %arrayidx1.76 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 76 + store i32 %77, i32* %arrayidx1.76, align 4, !tbaa !7 + %arrayidx.77 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 77 + %78 = load i32, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %arrayidx1.77 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 77 + store i32 %78, i32* %arrayidx1.77, align 4, !tbaa !7 + %arrayidx.78 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 78 + %79 = load i32, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %arrayidx1.78 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 78 + store i32 %79, i32* %arrayidx1.78, align 4, !tbaa !7 + %arrayidx.79 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 79 + %80 = load i32, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %arrayidx1.79 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 79 + store i32 %80, i32* %arrayidx1.79, align 4, !tbaa !7 + %arrayidx.80 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 80 + %81 = load i32, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %arrayidx1.80 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 80 + store i32 %81, i32* %arrayidx1.80, align 4, !tbaa !7 + %arrayidx.81 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 81 + %82 = load i32, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %arrayidx1.81 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 81 + store i32 %82, i32* %arrayidx1.81, align 4, !tbaa !7 + %arrayidx.82 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 82 + %83 = load i32, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %arrayidx1.82 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 82 + store i32 %83, i32* %arrayidx1.82, align 4, !tbaa !7 + %arrayidx.83 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 83 + %84 = load i32, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %arrayidx1.83 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 83 + store i32 %84, i32* %arrayidx1.83, align 4, !tbaa !7 + %arrayidx.84 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 84 + %85 = load i32, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %arrayidx1.84 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 84 + store i32 %85, i32* %arrayidx1.84, align 4, !tbaa !7 + %arrayidx.85 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 85 + %86 = load i32, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %arrayidx1.85 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 85 + store i32 %86, i32* %arrayidx1.85, align 4, !tbaa !7 + %arrayidx.86 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 86 + %87 = load i32, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %arrayidx1.86 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 86 + store i32 %87, i32* %arrayidx1.86, align 4, !tbaa !7 + %arrayidx.87 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 87 + %88 = load i32, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %arrayidx1.87 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 87 + store i32 %88, i32* %arrayidx1.87, align 4, !tbaa !7 + %arrayidx.88 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 88 + %89 = load i32, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %arrayidx1.88 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 88 + store i32 %89, i32* %arrayidx1.88, align 4, !tbaa !7 + %arrayidx.89 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 89 + %90 = load i32, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %arrayidx1.89 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 89 + store i32 %90, i32* %arrayidx1.89, align 4, !tbaa !7 + %arrayidx.90 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 90 + %91 = load i32, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %arrayidx1.90 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 90 + store i32 %91, i32* %arrayidx1.90, align 4, !tbaa !7 + %arrayidx.91 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 91 + %92 = load i32, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %arrayidx1.91 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 91 + store i32 %92, i32* %arrayidx1.91, align 4, !tbaa !7 + %arrayidx.92 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 92 + %93 = load i32, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %arrayidx1.92 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 92 + store i32 %93, i32* %arrayidx1.92, align 4, !tbaa !7 + %arrayidx.93 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 93 + %94 = load i32, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %arrayidx1.93 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 93 + store i32 %94, i32* %arrayidx1.93, align 4, !tbaa !7 + %arrayidx.94 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 94 + %95 = load i32, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %arrayidx1.94 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 94 + store i32 %95, i32* %arrayidx1.94, align 4, !tbaa !7 + %arrayidx.95 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 95 + %96 = load i32, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %arrayidx1.95 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 95 + store i32 %96, i32* %arrayidx1.95, align 4, !tbaa !7 + %arrayidx.96 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 96 + %97 = load i32, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %arrayidx1.96 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 96 + store i32 %97, i32* %arrayidx1.96, align 4, !tbaa !7 + %arrayidx.97 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 97 + %98 = load i32, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %arrayidx1.97 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 97 + store i32 %98, i32* %arrayidx1.97, align 4, !tbaa !7 + %arrayidx.98 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 98 + %99 = load i32, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %arrayidx1.98 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 98 + store i32 %99, i32* %arrayidx1.98, align 4, !tbaa !7 + %arrayidx.99 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 99 + %100 = load i32, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %arrayidx1.99 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 99 + store i32 %100, i32* %arrayidx1.99, align 4, !tbaa !7 + %arrayidx.100 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 100 + %101 = load i32, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %arrayidx1.100 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 100 + store i32 %101, i32* %arrayidx1.100, align 4, !tbaa !7 + %arrayidx.101 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 101 + %102 = load i32, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %arrayidx1.101 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 101 + store i32 %102, i32* %arrayidx1.101, align 4, !tbaa !7 + %arrayidx.102 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 102 + %103 = load i32, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %arrayidx1.102 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 102 + store i32 %103, i32* %arrayidx1.102, align 4, !tbaa !7 + %arrayidx.103 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 103 + %104 = load i32, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %arrayidx1.103 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 103 + store i32 %104, i32* %arrayidx1.103, align 4, !tbaa !7 + %arrayidx.104 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 104 + %105 = load i32, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %arrayidx1.104 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 104 + store i32 %105, i32* %arrayidx1.104, align 4, !tbaa !7 + %arrayidx.105 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 105 + %106 = load i32, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %arrayidx1.105 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 105 + store i32 %106, i32* %arrayidx1.105, align 4, !tbaa !7 + %arrayidx.106 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 106 + %107 = load i32, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %arrayidx1.106 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 106 + store i32 %107, i32* %arrayidx1.106, align 4, !tbaa !7 + %arrayidx.107 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 107 + %108 = load i32, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %arrayidx1.107 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 107 + store i32 %108, i32* %arrayidx1.107, align 4, !tbaa !7 + %arrayidx.108 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 108 + %109 = load i32, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %arrayidx1.108 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 108 + store i32 %109, i32* %arrayidx1.108, align 4, !tbaa !7 + %arrayidx.109 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 109 + %110 = load i32, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %arrayidx1.109 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 109 + store i32 %110, i32* %arrayidx1.109, align 4, !tbaa !7 + %arrayidx.110 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 110 + %111 = load i32, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + %arrayidx1.110 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 110 + store i32 %111, i32* %arrayidx1.110, align 4, !tbaa !7 + %112 = load i32, i32* %arrayidx1, align 4, !tbaa !7 + %mul = sub nsw i32 0, %112 + store i32 %mul, i32 addrspace(1)* %A, align 4, !tbaa !7 + %113 = load i32, i32* %arrayidx1.1, align 4, !tbaa !7 + %mul.1 = sub nsw i32 0, %113 + store i32 %mul.1, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %114 = load i32, i32* %arrayidx1.2, align 4, !tbaa !7 + %mul.2 = sub nsw i32 0, %114 + store i32 %mul.2, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %115 = load i32, i32* %arrayidx1.3, align 4, !tbaa !7 + %mul.3 = sub nsw i32 0, %115 + store i32 %mul.3, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %116 = load i32, i32* %arrayidx1.4, align 4, !tbaa !7 + %mul.4 = sub nsw i32 0, %116 + store i32 %mul.4, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %117 = load i32, i32* %arrayidx1.5, align 4, !tbaa !7 + %mul.5 = sub nsw i32 0, %117 + store i32 %mul.5, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %118 = load i32, i32* %arrayidx1.6, align 4, !tbaa !7 + %mul.6 = sub nsw i32 0, %118 + store i32 %mul.6, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %119 = load i32, i32* %arrayidx1.7, align 4, !tbaa !7 + %mul.7 = sub nsw i32 0, %119 + store i32 %mul.7, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %120 = load i32, i32* %arrayidx1.8, align 4, !tbaa !7 + %mul.8 = sub nsw i32 0, %120 + store i32 %mul.8, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %121 = load i32, i32* %arrayidx1.9, align 4, !tbaa !7 + %mul.9 = sub nsw i32 0, %121 + store i32 %mul.9, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %122 = load i32, i32* %arrayidx1.10, align 4, !tbaa !7 + %mul.10 = sub nsw i32 0, %122 + store i32 %mul.10, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %123 = load i32, i32* %arrayidx1.11, align 4, !tbaa !7 + %mul.11 = sub nsw i32 0, %123 + store i32 %mul.11, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %124 = load i32, i32* %arrayidx1.12, align 4, !tbaa !7 + %mul.12 = sub nsw i32 0, %124 + store i32 %mul.12, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %125 = load i32, i32* %arrayidx1.13, align 4, !tbaa !7 + %mul.13 = sub nsw i32 0, %125 + store i32 %mul.13, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %126 = load i32, i32* %arrayidx1.14, align 4, !tbaa !7 + %mul.14 = sub nsw i32 0, %126 + store i32 %mul.14, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %127 = load i32, i32* %arrayidx1.15, align 4, !tbaa !7 + %mul.15 = sub nsw i32 0, %127 + store i32 %mul.15, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %128 = load i32, i32* %arrayidx1.16, align 4, !tbaa !7 + %mul.16 = sub nsw i32 0, %128 + store i32 %mul.16, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %129 = load i32, i32* %arrayidx1.17, align 4, !tbaa !7 + %mul.17 = sub nsw i32 0, %129 + store i32 %mul.17, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %130 = load i32, i32* %arrayidx1.18, align 4, !tbaa !7 + %mul.18 = sub nsw i32 0, %130 + store i32 %mul.18, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %131 = load i32, i32* %arrayidx1.19, align 4, !tbaa !7 + %mul.19 = sub nsw i32 0, %131 + store i32 %mul.19, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %132 = load i32, i32* %arrayidx1.20, align 4, !tbaa !7 + %mul.20 = sub nsw i32 0, %132 + store i32 %mul.20, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %133 = load i32, i32* %arrayidx1.21, align 4, !tbaa !7 + %mul.21 = sub nsw i32 0, %133 + store i32 %mul.21, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %134 = load i32, i32* %arrayidx1.22, align 4, !tbaa !7 + %mul.22 = sub nsw i32 0, %134 + store i32 %mul.22, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %135 = load i32, i32* %arrayidx1.23, align 4, !tbaa !7 + %mul.23 = sub nsw i32 0, %135 + store i32 %mul.23, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %136 = load i32, i32* %arrayidx1.24, align 4, !tbaa !7 + %mul.24 = sub nsw i32 0, %136 + store i32 %mul.24, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %137 = load i32, i32* %arrayidx1.25, align 4, !tbaa !7 + %mul.25 = sub nsw i32 0, %137 + store i32 %mul.25, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %138 = load i32, i32* %arrayidx1.26, align 4, !tbaa !7 + %mul.26 = sub nsw i32 0, %138 + store i32 %mul.26, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %139 = load i32, i32* %arrayidx1.27, align 4, !tbaa !7 + %mul.27 = sub nsw i32 0, %139 + store i32 %mul.27, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %140 = load i32, i32* %arrayidx1.28, align 4, !tbaa !7 + %mul.28 = sub nsw i32 0, %140 + store i32 %mul.28, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %141 = load i32, i32* %arrayidx1.29, align 4, !tbaa !7 + %mul.29 = sub nsw i32 0, %141 + store i32 %mul.29, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %142 = load i32, i32* %arrayidx1.30, align 4, !tbaa !7 + %mul.30 = sub nsw i32 0, %142 + store i32 %mul.30, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %143 = load i32, i32* %arrayidx1.31, align 4, !tbaa !7 + %mul.31 = sub nsw i32 0, %143 + store i32 %mul.31, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %144 = load i32, i32* %arrayidx1.32, align 4, !tbaa !7 + %mul.32 = sub nsw i32 0, %144 + store i32 %mul.32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %145 = load i32, i32* %arrayidx1.33, align 4, !tbaa !7 + %mul.33 = sub nsw i32 0, %145 + store i32 %mul.33, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %146 = load i32, i32* %arrayidx1.34, align 4, !tbaa !7 + %mul.34 = sub nsw i32 0, %146 + store i32 %mul.34, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %147 = load i32, i32* %arrayidx1.35, align 4, !tbaa !7 + %mul.35 = sub nsw i32 0, %147 + store i32 %mul.35, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %148 = load i32, i32* %arrayidx1.36, align 4, !tbaa !7 + %mul.36 = sub nsw i32 0, %148 + store i32 %mul.36, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %149 = load i32, i32* %arrayidx1.37, align 4, !tbaa !7 + %mul.37 = sub nsw i32 0, %149 + store i32 %mul.37, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %150 = load i32, i32* %arrayidx1.38, align 4, !tbaa !7 + %mul.38 = sub nsw i32 0, %150 + store i32 %mul.38, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %151 = load i32, i32* %arrayidx1.39, align 4, !tbaa !7 + %mul.39 = sub nsw i32 0, %151 + store i32 %mul.39, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %152 = load i32, i32* %arrayidx1.40, align 4, !tbaa !7 + %mul.40 = sub nsw i32 0, %152 + store i32 %mul.40, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %153 = load i32, i32* %arrayidx1.41, align 4, !tbaa !7 + %mul.41 = sub nsw i32 0, %153 + store i32 %mul.41, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %154 = load i32, i32* %arrayidx1.42, align 4, !tbaa !7 + %mul.42 = sub nsw i32 0, %154 + store i32 %mul.42, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %155 = load i32, i32* %arrayidx1.43, align 4, !tbaa !7 + %mul.43 = sub nsw i32 0, %155 + store i32 %mul.43, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %156 = load i32, i32* %arrayidx1.44, align 4, !tbaa !7 + %mul.44 = sub nsw i32 0, %156 + store i32 %mul.44, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %157 = load i32, i32* %arrayidx1.45, align 4, !tbaa !7 + %mul.45 = sub nsw i32 0, %157 + store i32 %mul.45, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %158 = load i32, i32* %arrayidx1.46, align 4, !tbaa !7 + %mul.46 = sub nsw i32 0, %158 + store i32 %mul.46, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %159 = load i32, i32* %arrayidx1.47, align 4, !tbaa !7 + %mul.47 = sub nsw i32 0, %159 + store i32 %mul.47, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %160 = load i32, i32* %arrayidx1.48, align 4, !tbaa !7 + %mul.48 = sub nsw i32 0, %160 + store i32 %mul.48, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %161 = load i32, i32* %arrayidx1.49, align 4, !tbaa !7 + %mul.49 = sub nsw i32 0, %161 + store i32 %mul.49, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %162 = load i32, i32* %arrayidx1.50, align 4, !tbaa !7 + %mul.50 = sub nsw i32 0, %162 + store i32 %mul.50, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %163 = load i32, i32* %arrayidx1.51, align 4, !tbaa !7 + %mul.51 = sub nsw i32 0, %163 + store i32 %mul.51, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %164 = load i32, i32* %arrayidx1.52, align 4, !tbaa !7 + %mul.52 = sub nsw i32 0, %164 + store i32 %mul.52, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %165 = load i32, i32* %arrayidx1.53, align 4, !tbaa !7 + %mul.53 = sub nsw i32 0, %165 + store i32 %mul.53, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %166 = load i32, i32* %arrayidx1.54, align 4, !tbaa !7 + %mul.54 = sub nsw i32 0, %166 + store i32 %mul.54, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %167 = load i32, i32* %arrayidx1.55, align 4, !tbaa !7 + %mul.55 = sub nsw i32 0, %167 + store i32 %mul.55, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %168 = load i32, i32* %arrayidx1.56, align 4, !tbaa !7 + %mul.56 = sub nsw i32 0, %168 + store i32 %mul.56, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %169 = load i32, i32* %arrayidx1.57, align 4, !tbaa !7 + %mul.57 = sub nsw i32 0, %169 + store i32 %mul.57, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %170 = load i32, i32* %arrayidx1.58, align 4, !tbaa !7 + %mul.58 = sub nsw i32 0, %170 + store i32 %mul.58, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %171 = load i32, i32* %arrayidx1.59, align 4, !tbaa !7 + %mul.59 = sub nsw i32 0, %171 + store i32 %mul.59, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %172 = load i32, i32* %arrayidx1.60, align 4, !tbaa !7 + %mul.60 = sub nsw i32 0, %172 + store i32 %mul.60, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %173 = load i32, i32* %arrayidx1.61, align 4, !tbaa !7 + %mul.61 = sub nsw i32 0, %173 + store i32 %mul.61, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %174 = load i32, i32* %arrayidx1.62, align 4, !tbaa !7 + %mul.62 = sub nsw i32 0, %174 + store i32 %mul.62, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %175 = load i32, i32* %arrayidx1.63, align 4, !tbaa !7 + %mul.63 = sub nsw i32 0, %175 + store i32 %mul.63, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %176 = load i32, i32* %arrayidx1.64, align 4, !tbaa !7 + %mul.64 = sub nsw i32 0, %176 + store i32 %mul.64, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %177 = load i32, i32* %arrayidx1.65, align 4, !tbaa !7 + %mul.65 = sub nsw i32 0, %177 + store i32 %mul.65, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %178 = load i32, i32* %arrayidx1.66, align 4, !tbaa !7 + %mul.66 = sub nsw i32 0, %178 + store i32 %mul.66, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %179 = load i32, i32* %arrayidx1.67, align 4, !tbaa !7 + %mul.67 = sub nsw i32 0, %179 + store i32 %mul.67, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %180 = load i32, i32* %arrayidx1.68, align 4, !tbaa !7 + %mul.68 = sub nsw i32 0, %180 + store i32 %mul.68, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %181 = load i32, i32* %arrayidx1.69, align 4, !tbaa !7 + %mul.69 = sub nsw i32 0, %181 + store i32 %mul.69, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %182 = load i32, i32* %arrayidx1.70, align 4, !tbaa !7 + %mul.70 = sub nsw i32 0, %182 + store i32 %mul.70, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %183 = load i32, i32* %arrayidx1.71, align 4, !tbaa !7 + %mul.71 = sub nsw i32 0, %183 + store i32 %mul.71, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %184 = load i32, i32* %arrayidx1.72, align 4, !tbaa !7 + %mul.72 = sub nsw i32 0, %184 + store i32 %mul.72, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %185 = load i32, i32* %arrayidx1.73, align 4, !tbaa !7 + %mul.73 = sub nsw i32 0, %185 + store i32 %mul.73, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %186 = load i32, i32* %arrayidx1.74, align 4, !tbaa !7 + %mul.74 = sub nsw i32 0, %186 + store i32 %mul.74, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %187 = load i32, i32* %arrayidx1.75, align 4, !tbaa !7 + %mul.75 = sub nsw i32 0, %187 + store i32 %mul.75, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %188 = load i32, i32* %arrayidx1.76, align 4, !tbaa !7 + %mul.76 = sub nsw i32 0, %188 + store i32 %mul.76, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %189 = load i32, i32* %arrayidx1.77, align 4, !tbaa !7 + %mul.77 = sub nsw i32 0, %189 + store i32 %mul.77, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %190 = load i32, i32* %arrayidx1.78, align 4, !tbaa !7 + %mul.78 = sub nsw i32 0, %190 + store i32 %mul.78, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %191 = load i32, i32* %arrayidx1.79, align 4, !tbaa !7 + %mul.79 = sub nsw i32 0, %191 + store i32 %mul.79, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %192 = load i32, i32* %arrayidx1.80, align 4, !tbaa !7 + %mul.80 = sub nsw i32 0, %192 + store i32 %mul.80, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %193 = load i32, i32* %arrayidx1.81, align 4, !tbaa !7 + %mul.81 = sub nsw i32 0, %193 + store i32 %mul.81, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %194 = load i32, i32* %arrayidx1.82, align 4, !tbaa !7 + %mul.82 = sub nsw i32 0, %194 + store i32 %mul.82, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %195 = load i32, i32* %arrayidx1.83, align 4, !tbaa !7 + %mul.83 = sub nsw i32 0, %195 + store i32 %mul.83, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %196 = load i32, i32* %arrayidx1.84, align 4, !tbaa !7 + %mul.84 = sub nsw i32 0, %196 + store i32 %mul.84, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %197 = load i32, i32* %arrayidx1.85, align 4, !tbaa !7 + %mul.85 = sub nsw i32 0, %197 + store i32 %mul.85, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %198 = load i32, i32* %arrayidx1.86, align 4, !tbaa !7 + %mul.86 = sub nsw i32 0, %198 + store i32 %mul.86, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %199 = load i32, i32* %arrayidx1.87, align 4, !tbaa !7 + %mul.87 = sub nsw i32 0, %199 + store i32 %mul.87, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %200 = load i32, i32* %arrayidx1.88, align 4, !tbaa !7 + %mul.88 = sub nsw i32 0, %200 + store i32 %mul.88, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %201 = load i32, i32* %arrayidx1.89, align 4, !tbaa !7 + %mul.89 = sub nsw i32 0, %201 + store i32 %mul.89, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %202 = load i32, i32* %arrayidx1.90, align 4, !tbaa !7 + %mul.90 = sub nsw i32 0, %202 + store i32 %mul.90, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %203 = load i32, i32* %arrayidx1.91, align 4, !tbaa !7 + %mul.91 = sub nsw i32 0, %203 + store i32 %mul.91, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %204 = load i32, i32* %arrayidx1.92, align 4, !tbaa !7 + %mul.92 = sub nsw i32 0, %204 + store i32 %mul.92, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %205 = load i32, i32* %arrayidx1.93, align 4, !tbaa !7 + %mul.93 = sub nsw i32 0, %205 + store i32 %mul.93, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %206 = load i32, i32* %arrayidx1.94, align 4, !tbaa !7 + %mul.94 = sub nsw i32 0, %206 + store i32 %mul.94, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %207 = load i32, i32* %arrayidx1.95, align 4, !tbaa !7 + %mul.95 = sub nsw i32 0, %207 + store i32 %mul.95, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %208 = load i32, i32* %arrayidx1.96, align 4, !tbaa !7 + %mul.96 = sub nsw i32 0, %208 + store i32 %mul.96, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %209 = load i32, i32* %arrayidx1.97, align 4, !tbaa !7 + %mul.97 = sub nsw i32 0, %209 + store i32 %mul.97, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %210 = load i32, i32* %arrayidx1.98, align 4, !tbaa !7 + %mul.98 = sub nsw i32 0, %210 + store i32 %mul.98, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %211 = load i32, i32* %arrayidx1.99, align 4, !tbaa !7 + %mul.99 = sub nsw i32 0, %211 + store i32 %mul.99, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %212 = load i32, i32* %arrayidx1.100, align 4, !tbaa !7 + %mul.100 = sub nsw i32 0, %212 + store i32 %mul.100, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %213 = load i32, i32* %arrayidx1.101, align 4, !tbaa !7 + %mul.101 = sub nsw i32 0, %213 + store i32 %mul.101, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %214 = load i32, i32* %arrayidx1.102, align 4, !tbaa !7 + %mul.102 = sub nsw i32 0, %214 + store i32 %mul.102, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %215 = load i32, i32* %arrayidx1.103, align 4, !tbaa !7 + %mul.103 = sub nsw i32 0, %215 + store i32 %mul.103, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %216 = load i32, i32* %arrayidx1.104, align 4, !tbaa !7 + %mul.104 = sub nsw i32 0, %216 + store i32 %mul.104, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %217 = load i32, i32* %arrayidx1.105, align 4, !tbaa !7 + %mul.105 = sub nsw i32 0, %217 + store i32 %mul.105, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %218 = load i32, i32* %arrayidx1.106, align 4, !tbaa !7 + %mul.106 = sub nsw i32 0, %218 + store i32 %mul.106, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %219 = load i32, i32* %arrayidx1.107, align 4, !tbaa !7 + %mul.107 = sub nsw i32 0, %219 + store i32 %mul.107, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %220 = load i32, i32* %arrayidx1.108, align 4, !tbaa !7 + %mul.108 = sub nsw i32 0, %220 + store i32 %mul.108, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %221 = load i32, i32* %arrayidx1.109, align 4, !tbaa !7 + %mul.109 = sub nsw i32 0, %221 + store i32 %mul.109, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %222 = load i32, i32* %arrayidx1.110, align 4, !tbaa !7 + %mul.110 = sub nsw i32 0, %222 + store i32 %mul.110, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + call void @llvm.lifetime.end(i64 444, i8* %0) #2 + ret void +} +attributes #0 = { nounwind "amdgpu-num-active-waves-per-eu"="1,1" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="fiji" "target-features"="+16-bit-insts,+s-memrealtime" "unsafe-fp-math"="false" "use-soft-float"="false" } + +; Exactly 5 active waves per execution unit. +; CHECK: SGPRBlocks: 12 +; CHECK: VGPRBlocks: 11 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 97 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 48 +define void @many_regs_exactly_5(i32 addrspace(1)* nocapture %A) #3 { +entry: + %a = alloca [111 x i32], align 4 + %0 = bitcast [111 x i32]* %a to i8* + call void @llvm.lifetime.start(i64 444, i8* %0) #2 + %1 = load i32, i32 addrspace(1)* %A, align 4, !tbaa !7 + %arrayidx1 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 0 + store i32 %1, i32* %arrayidx1, align 4, !tbaa !7 + %arrayidx.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 1 + %2 = load i32, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %arrayidx1.1 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 1 + store i32 %2, i32* %arrayidx1.1, align 4, !tbaa !7 + %arrayidx.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 2 + %3 = load i32, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %arrayidx1.2 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 2 + store i32 %3, i32* %arrayidx1.2, align 4, !tbaa !7 + %arrayidx.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 3 + %4 = load i32, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %arrayidx1.3 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 3 + store i32 %4, i32* %arrayidx1.3, align 4, !tbaa !7 + %arrayidx.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 4 + %5 = load i32, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %arrayidx1.4 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 4 + store i32 %5, i32* %arrayidx1.4, align 4, !tbaa !7 + %arrayidx.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 5 + %6 = load i32, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %arrayidx1.5 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 5 + store i32 %6, i32* %arrayidx1.5, align 4, !tbaa !7 + %arrayidx.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 6 + %7 = load i32, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %arrayidx1.6 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 6 + store i32 %7, i32* %arrayidx1.6, align 4, !tbaa !7 + %arrayidx.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 7 + %8 = load i32, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %arrayidx1.7 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 7 + store i32 %8, i32* %arrayidx1.7, align 4, !tbaa !7 + %arrayidx.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 8 + %9 = load i32, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %arrayidx1.8 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 8 + store i32 %9, i32* %arrayidx1.8, align 4, !tbaa !7 + %arrayidx.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 9 + %10 = load i32, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %arrayidx1.9 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 9 + store i32 %10, i32* %arrayidx1.9, align 4, !tbaa !7 + %arrayidx.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 10 + %11 = load i32, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %arrayidx1.10 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 10 + store i32 %11, i32* %arrayidx1.10, align 4, !tbaa !7 + %arrayidx.11 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 11 + %12 = load i32, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %arrayidx1.11 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 11 + store i32 %12, i32* %arrayidx1.11, align 4, !tbaa !7 + %arrayidx.12 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 12 + %13 = load i32, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %arrayidx1.12 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 12 + store i32 %13, i32* %arrayidx1.12, align 4, !tbaa !7 + %arrayidx.13 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 13 + %14 = load i32, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %arrayidx1.13 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 13 + store i32 %14, i32* %arrayidx1.13, align 4, !tbaa !7 + %arrayidx.14 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 14 + %15 = load i32, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %arrayidx1.14 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 14 + store i32 %15, i32* %arrayidx1.14, align 4, !tbaa !7 + %arrayidx.15 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 15 + %16 = load i32, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %arrayidx1.15 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 15 + store i32 %16, i32* %arrayidx1.15, align 4, !tbaa !7 + %arrayidx.16 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 16 + %17 = load i32, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %arrayidx1.16 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 16 + store i32 %17, i32* %arrayidx1.16, align 4, !tbaa !7 + %arrayidx.17 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 17 + %18 = load i32, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %arrayidx1.17 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 17 + store i32 %18, i32* %arrayidx1.17, align 4, !tbaa !7 + %arrayidx.18 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 18 + %19 = load i32, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %arrayidx1.18 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 18 + store i32 %19, i32* %arrayidx1.18, align 4, !tbaa !7 + %arrayidx.19 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 19 + %20 = load i32, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %arrayidx1.19 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 19 + store i32 %20, i32* %arrayidx1.19, align 4, !tbaa !7 + %arrayidx.20 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 20 + %21 = load i32, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %arrayidx1.20 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 20 + store i32 %21, i32* %arrayidx1.20, align 4, !tbaa !7 + %arrayidx.21 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 21 + %22 = load i32, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %arrayidx1.21 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 21 + store i32 %22, i32* %arrayidx1.21, align 4, !tbaa !7 + %arrayidx.22 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 22 + %23 = load i32, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %arrayidx1.22 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 22 + store i32 %23, i32* %arrayidx1.22, align 4, !tbaa !7 + %arrayidx.23 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 23 + %24 = load i32, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %arrayidx1.23 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 23 + store i32 %24, i32* %arrayidx1.23, align 4, !tbaa !7 + %arrayidx.24 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 24 + %25 = load i32, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %arrayidx1.24 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 24 + store i32 %25, i32* %arrayidx1.24, align 4, !tbaa !7 + %arrayidx.25 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 25 + %26 = load i32, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %arrayidx1.25 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 25 + store i32 %26, i32* %arrayidx1.25, align 4, !tbaa !7 + %arrayidx.26 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 26 + %27 = load i32, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %arrayidx1.26 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 26 + store i32 %27, i32* %arrayidx1.26, align 4, !tbaa !7 + %arrayidx.27 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 27 + %28 = load i32, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %arrayidx1.27 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 27 + store i32 %28, i32* %arrayidx1.27, align 4, !tbaa !7 + %arrayidx.28 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 28 + %29 = load i32, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %arrayidx1.28 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 28 + store i32 %29, i32* %arrayidx1.28, align 4, !tbaa !7 + %arrayidx.29 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 29 + %30 = load i32, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %arrayidx1.29 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 29 + store i32 %30, i32* %arrayidx1.29, align 4, !tbaa !7 + %arrayidx.30 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 30 + %31 = load i32, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %arrayidx1.30 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 30 + store i32 %31, i32* %arrayidx1.30, align 4, !tbaa !7 + %arrayidx.31 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 31 + %32 = load i32, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %arrayidx1.31 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 31 + store i32 %32, i32* %arrayidx1.31, align 4, !tbaa !7 + %arrayidx.32 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 32 + %33 = load i32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %arrayidx1.32 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 32 + store i32 %33, i32* %arrayidx1.32, align 4, !tbaa !7 + %arrayidx.33 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 33 + %34 = load i32, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %arrayidx1.33 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 33 + store i32 %34, i32* %arrayidx1.33, align 4, !tbaa !7 + %arrayidx.34 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 34 + %35 = load i32, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %arrayidx1.34 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 34 + store i32 %35, i32* %arrayidx1.34, align 4, !tbaa !7 + %arrayidx.35 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 35 + %36 = load i32, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %arrayidx1.35 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 35 + store i32 %36, i32* %arrayidx1.35, align 4, !tbaa !7 + %arrayidx.36 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 36 + %37 = load i32, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %arrayidx1.36 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 36 + store i32 %37, i32* %arrayidx1.36, align 4, !tbaa !7 + %arrayidx.37 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 37 + %38 = load i32, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %arrayidx1.37 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 37 + store i32 %38, i32* %arrayidx1.37, align 4, !tbaa !7 + %arrayidx.38 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 38 + %39 = load i32, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %arrayidx1.38 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 38 + store i32 %39, i32* %arrayidx1.38, align 4, !tbaa !7 + %arrayidx.39 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 39 + %40 = load i32, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %arrayidx1.39 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 39 + store i32 %40, i32* %arrayidx1.39, align 4, !tbaa !7 + %arrayidx.40 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 40 + %41 = load i32, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %arrayidx1.40 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 40 + store i32 %41, i32* %arrayidx1.40, align 4, !tbaa !7 + %arrayidx.41 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 41 + %42 = load i32, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %arrayidx1.41 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 41 + store i32 %42, i32* %arrayidx1.41, align 4, !tbaa !7 + %arrayidx.42 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 42 + %43 = load i32, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %arrayidx1.42 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 42 + store i32 %43, i32* %arrayidx1.42, align 4, !tbaa !7 + %arrayidx.43 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 43 + %44 = load i32, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %arrayidx1.43 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 43 + store i32 %44, i32* %arrayidx1.43, align 4, !tbaa !7 + %arrayidx.44 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 44 + %45 = load i32, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %arrayidx1.44 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 44 + store i32 %45, i32* %arrayidx1.44, align 4, !tbaa !7 + %arrayidx.45 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 45 + %46 = load i32, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %arrayidx1.45 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 45 + store i32 %46, i32* %arrayidx1.45, align 4, !tbaa !7 + %arrayidx.46 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 46 + %47 = load i32, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %arrayidx1.46 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 46 + store i32 %47, i32* %arrayidx1.46, align 4, !tbaa !7 + %arrayidx.47 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 47 + %48 = load i32, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %arrayidx1.47 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 47 + store i32 %48, i32* %arrayidx1.47, align 4, !tbaa !7 + %arrayidx.48 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 48 + %49 = load i32, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %arrayidx1.48 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 48 + store i32 %49, i32* %arrayidx1.48, align 4, !tbaa !7 + %arrayidx.49 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 49 + %50 = load i32, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %arrayidx1.49 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 49 + store i32 %50, i32* %arrayidx1.49, align 4, !tbaa !7 + %arrayidx.50 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 50 + %51 = load i32, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %arrayidx1.50 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 50 + store i32 %51, i32* %arrayidx1.50, align 4, !tbaa !7 + %arrayidx.51 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 51 + %52 = load i32, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %arrayidx1.51 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 51 + store i32 %52, i32* %arrayidx1.51, align 4, !tbaa !7 + %arrayidx.52 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 52 + %53 = load i32, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %arrayidx1.52 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 52 + store i32 %53, i32* %arrayidx1.52, align 4, !tbaa !7 + %arrayidx.53 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 53 + %54 = load i32, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %arrayidx1.53 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 53 + store i32 %54, i32* %arrayidx1.53, align 4, !tbaa !7 + %arrayidx.54 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 54 + %55 = load i32, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %arrayidx1.54 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 54 + store i32 %55, i32* %arrayidx1.54, align 4, !tbaa !7 + %arrayidx.55 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 55 + %56 = load i32, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %arrayidx1.55 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 55 + store i32 %56, i32* %arrayidx1.55, align 4, !tbaa !7 + %arrayidx.56 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 56 + %57 = load i32, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %arrayidx1.56 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 56 + store i32 %57, i32* %arrayidx1.56, align 4, !tbaa !7 + %arrayidx.57 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 57 + %58 = load i32, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %arrayidx1.57 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 57 + store i32 %58, i32* %arrayidx1.57, align 4, !tbaa !7 + %arrayidx.58 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 58 + %59 = load i32, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %arrayidx1.58 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 58 + store i32 %59, i32* %arrayidx1.58, align 4, !tbaa !7 + %arrayidx.59 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 59 + %60 = load i32, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %arrayidx1.59 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 59 + store i32 %60, i32* %arrayidx1.59, align 4, !tbaa !7 + %arrayidx.60 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 60 + %61 = load i32, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %arrayidx1.60 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 60 + store i32 %61, i32* %arrayidx1.60, align 4, !tbaa !7 + %arrayidx.61 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 61 + %62 = load i32, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %arrayidx1.61 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 61 + store i32 %62, i32* %arrayidx1.61, align 4, !tbaa !7 + %arrayidx.62 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 62 + %63 = load i32, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %arrayidx1.62 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 62 + store i32 %63, i32* %arrayidx1.62, align 4, !tbaa !7 + %arrayidx.63 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 63 + %64 = load i32, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %arrayidx1.63 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 63 + store i32 %64, i32* %arrayidx1.63, align 4, !tbaa !7 + %arrayidx.64 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 64 + %65 = load i32, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %arrayidx1.64 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 64 + store i32 %65, i32* %arrayidx1.64, align 4, !tbaa !7 + %arrayidx.65 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 65 + %66 = load i32, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %arrayidx1.65 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 65 + store i32 %66, i32* %arrayidx1.65, align 4, !tbaa !7 + %arrayidx.66 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 66 + %67 = load i32, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %arrayidx1.66 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 66 + store i32 %67, i32* %arrayidx1.66, align 4, !tbaa !7 + %arrayidx.67 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 67 + %68 = load i32, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %arrayidx1.67 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 67 + store i32 %68, i32* %arrayidx1.67, align 4, !tbaa !7 + %arrayidx.68 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 68 + %69 = load i32, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %arrayidx1.68 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 68 + store i32 %69, i32* %arrayidx1.68, align 4, !tbaa !7 + %arrayidx.69 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 69 + %70 = load i32, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %arrayidx1.69 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 69 + store i32 %70, i32* %arrayidx1.69, align 4, !tbaa !7 + %arrayidx.70 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 70 + %71 = load i32, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %arrayidx1.70 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 70 + store i32 %71, i32* %arrayidx1.70, align 4, !tbaa !7 + %arrayidx.71 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 71 + %72 = load i32, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %arrayidx1.71 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 71 + store i32 %72, i32* %arrayidx1.71, align 4, !tbaa !7 + %arrayidx.72 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 72 + %73 = load i32, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %arrayidx1.72 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 72 + store i32 %73, i32* %arrayidx1.72, align 4, !tbaa !7 + %arrayidx.73 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 73 + %74 = load i32, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %arrayidx1.73 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 73 + store i32 %74, i32* %arrayidx1.73, align 4, !tbaa !7 + %arrayidx.74 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 74 + %75 = load i32, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %arrayidx1.74 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 74 + store i32 %75, i32* %arrayidx1.74, align 4, !tbaa !7 + %arrayidx.75 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 75 + %76 = load i32, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %arrayidx1.75 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 75 + store i32 %76, i32* %arrayidx1.75, align 4, !tbaa !7 + %arrayidx.76 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 76 + %77 = load i32, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %arrayidx1.76 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 76 + store i32 %77, i32* %arrayidx1.76, align 4, !tbaa !7 + %arrayidx.77 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 77 + %78 = load i32, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %arrayidx1.77 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 77 + store i32 %78, i32* %arrayidx1.77, align 4, !tbaa !7 + %arrayidx.78 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 78 + %79 = load i32, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %arrayidx1.78 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 78 + store i32 %79, i32* %arrayidx1.78, align 4, !tbaa !7 + %arrayidx.79 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 79 + %80 = load i32, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %arrayidx1.79 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 79 + store i32 %80, i32* %arrayidx1.79, align 4, !tbaa !7 + %arrayidx.80 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 80 + %81 = load i32, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %arrayidx1.80 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 80 + store i32 %81, i32* %arrayidx1.80, align 4, !tbaa !7 + %arrayidx.81 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 81 + %82 = load i32, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %arrayidx1.81 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 81 + store i32 %82, i32* %arrayidx1.81, align 4, !tbaa !7 + %arrayidx.82 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 82 + %83 = load i32, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %arrayidx1.82 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 82 + store i32 %83, i32* %arrayidx1.82, align 4, !tbaa !7 + %arrayidx.83 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 83 + %84 = load i32, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %arrayidx1.83 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 83 + store i32 %84, i32* %arrayidx1.83, align 4, !tbaa !7 + %arrayidx.84 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 84 + %85 = load i32, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %arrayidx1.84 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 84 + store i32 %85, i32* %arrayidx1.84, align 4, !tbaa !7 + %arrayidx.85 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 85 + %86 = load i32, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %arrayidx1.85 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 85 + store i32 %86, i32* %arrayidx1.85, align 4, !tbaa !7 + %arrayidx.86 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 86 + %87 = load i32, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %arrayidx1.86 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 86 + store i32 %87, i32* %arrayidx1.86, align 4, !tbaa !7 + %arrayidx.87 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 87 + %88 = load i32, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %arrayidx1.87 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 87 + store i32 %88, i32* %arrayidx1.87, align 4, !tbaa !7 + %arrayidx.88 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 88 + %89 = load i32, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %arrayidx1.88 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 88 + store i32 %89, i32* %arrayidx1.88, align 4, !tbaa !7 + %arrayidx.89 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 89 + %90 = load i32, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %arrayidx1.89 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 89 + store i32 %90, i32* %arrayidx1.89, align 4, !tbaa !7 + %arrayidx.90 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 90 + %91 = load i32, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %arrayidx1.90 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 90 + store i32 %91, i32* %arrayidx1.90, align 4, !tbaa !7 + %arrayidx.91 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 91 + %92 = load i32, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %arrayidx1.91 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 91 + store i32 %92, i32* %arrayidx1.91, align 4, !tbaa !7 + %arrayidx.92 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 92 + %93 = load i32, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %arrayidx1.92 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 92 + store i32 %93, i32* %arrayidx1.92, align 4, !tbaa !7 + %arrayidx.93 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 93 + %94 = load i32, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %arrayidx1.93 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 93 + store i32 %94, i32* %arrayidx1.93, align 4, !tbaa !7 + %arrayidx.94 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 94 + %95 = load i32, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %arrayidx1.94 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 94 + store i32 %95, i32* %arrayidx1.94, align 4, !tbaa !7 + %arrayidx.95 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 95 + %96 = load i32, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %arrayidx1.95 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 95 + store i32 %96, i32* %arrayidx1.95, align 4, !tbaa !7 + %arrayidx.96 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 96 + %97 = load i32, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %arrayidx1.96 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 96 + store i32 %97, i32* %arrayidx1.96, align 4, !tbaa !7 + %arrayidx.97 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 97 + %98 = load i32, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %arrayidx1.97 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 97 + store i32 %98, i32* %arrayidx1.97, align 4, !tbaa !7 + %arrayidx.98 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 98 + %99 = load i32, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %arrayidx1.98 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 98 + store i32 %99, i32* %arrayidx1.98, align 4, !tbaa !7 + %arrayidx.99 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 99 + %100 = load i32, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %arrayidx1.99 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 99 + store i32 %100, i32* %arrayidx1.99, align 4, !tbaa !7 + %arrayidx.100 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 100 + %101 = load i32, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %arrayidx1.100 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 100 + store i32 %101, i32* %arrayidx1.100, align 4, !tbaa !7 + %arrayidx.101 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 101 + %102 = load i32, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %arrayidx1.101 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 101 + store i32 %102, i32* %arrayidx1.101, align 4, !tbaa !7 + %arrayidx.102 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 102 + %103 = load i32, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %arrayidx1.102 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 102 + store i32 %103, i32* %arrayidx1.102, align 4, !tbaa !7 + %arrayidx.103 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 103 + %104 = load i32, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %arrayidx1.103 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 103 + store i32 %104, i32* %arrayidx1.103, align 4, !tbaa !7 + %arrayidx.104 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 104 + %105 = load i32, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %arrayidx1.104 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 104 + store i32 %105, i32* %arrayidx1.104, align 4, !tbaa !7 + %arrayidx.105 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 105 + %106 = load i32, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %arrayidx1.105 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 105 + store i32 %106, i32* %arrayidx1.105, align 4, !tbaa !7 + %arrayidx.106 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 106 + %107 = load i32, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %arrayidx1.106 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 106 + store i32 %107, i32* %arrayidx1.106, align 4, !tbaa !7 + %arrayidx.107 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 107 + %108 = load i32, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %arrayidx1.107 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 107 + store i32 %108, i32* %arrayidx1.107, align 4, !tbaa !7 + %arrayidx.108 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 108 + %109 = load i32, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %arrayidx1.108 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 108 + store i32 %109, i32* %arrayidx1.108, align 4, !tbaa !7 + %arrayidx.109 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 109 + %110 = load i32, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %arrayidx1.109 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 109 + store i32 %110, i32* %arrayidx1.109, align 4, !tbaa !7 + %arrayidx.110 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 110 + %111 = load i32, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + %arrayidx1.110 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 110 + store i32 %111, i32* %arrayidx1.110, align 4, !tbaa !7 + %112 = load i32, i32* %arrayidx1, align 4, !tbaa !7 + %mul = sub nsw i32 0, %112 + store i32 %mul, i32 addrspace(1)* %A, align 4, !tbaa !7 + %113 = load i32, i32* %arrayidx1.1, align 4, !tbaa !7 + %mul.1 = sub nsw i32 0, %113 + store i32 %mul.1, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %114 = load i32, i32* %arrayidx1.2, align 4, !tbaa !7 + %mul.2 = sub nsw i32 0, %114 + store i32 %mul.2, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %115 = load i32, i32* %arrayidx1.3, align 4, !tbaa !7 + %mul.3 = sub nsw i32 0, %115 + store i32 %mul.3, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %116 = load i32, i32* %arrayidx1.4, align 4, !tbaa !7 + %mul.4 = sub nsw i32 0, %116 + store i32 %mul.4, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %117 = load i32, i32* %arrayidx1.5, align 4, !tbaa !7 + %mul.5 = sub nsw i32 0, %117 + store i32 %mul.5, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %118 = load i32, i32* %arrayidx1.6, align 4, !tbaa !7 + %mul.6 = sub nsw i32 0, %118 + store i32 %mul.6, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %119 = load i32, i32* %arrayidx1.7, align 4, !tbaa !7 + %mul.7 = sub nsw i32 0, %119 + store i32 %mul.7, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %120 = load i32, i32* %arrayidx1.8, align 4, !tbaa !7 + %mul.8 = sub nsw i32 0, %120 + store i32 %mul.8, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %121 = load i32, i32* %arrayidx1.9, align 4, !tbaa !7 + %mul.9 = sub nsw i32 0, %121 + store i32 %mul.9, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %122 = load i32, i32* %arrayidx1.10, align 4, !tbaa !7 + %mul.10 = sub nsw i32 0, %122 + store i32 %mul.10, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %123 = load i32, i32* %arrayidx1.11, align 4, !tbaa !7 + %mul.11 = sub nsw i32 0, %123 + store i32 %mul.11, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %124 = load i32, i32* %arrayidx1.12, align 4, !tbaa !7 + %mul.12 = sub nsw i32 0, %124 + store i32 %mul.12, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %125 = load i32, i32* %arrayidx1.13, align 4, !tbaa !7 + %mul.13 = sub nsw i32 0, %125 + store i32 %mul.13, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %126 = load i32, i32* %arrayidx1.14, align 4, !tbaa !7 + %mul.14 = sub nsw i32 0, %126 + store i32 %mul.14, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %127 = load i32, i32* %arrayidx1.15, align 4, !tbaa !7 + %mul.15 = sub nsw i32 0, %127 + store i32 %mul.15, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %128 = load i32, i32* %arrayidx1.16, align 4, !tbaa !7 + %mul.16 = sub nsw i32 0, %128 + store i32 %mul.16, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %129 = load i32, i32* %arrayidx1.17, align 4, !tbaa !7 + %mul.17 = sub nsw i32 0, %129 + store i32 %mul.17, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %130 = load i32, i32* %arrayidx1.18, align 4, !tbaa !7 + %mul.18 = sub nsw i32 0, %130 + store i32 %mul.18, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %131 = load i32, i32* %arrayidx1.19, align 4, !tbaa !7 + %mul.19 = sub nsw i32 0, %131 + store i32 %mul.19, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %132 = load i32, i32* %arrayidx1.20, align 4, !tbaa !7 + %mul.20 = sub nsw i32 0, %132 + store i32 %mul.20, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %133 = load i32, i32* %arrayidx1.21, align 4, !tbaa !7 + %mul.21 = sub nsw i32 0, %133 + store i32 %mul.21, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %134 = load i32, i32* %arrayidx1.22, align 4, !tbaa !7 + %mul.22 = sub nsw i32 0, %134 + store i32 %mul.22, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %135 = load i32, i32* %arrayidx1.23, align 4, !tbaa !7 + %mul.23 = sub nsw i32 0, %135 + store i32 %mul.23, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %136 = load i32, i32* %arrayidx1.24, align 4, !tbaa !7 + %mul.24 = sub nsw i32 0, %136 + store i32 %mul.24, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %137 = load i32, i32* %arrayidx1.25, align 4, !tbaa !7 + %mul.25 = sub nsw i32 0, %137 + store i32 %mul.25, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %138 = load i32, i32* %arrayidx1.26, align 4, !tbaa !7 + %mul.26 = sub nsw i32 0, %138 + store i32 %mul.26, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %139 = load i32, i32* %arrayidx1.27, align 4, !tbaa !7 + %mul.27 = sub nsw i32 0, %139 + store i32 %mul.27, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %140 = load i32, i32* %arrayidx1.28, align 4, !tbaa !7 + %mul.28 = sub nsw i32 0, %140 + store i32 %mul.28, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %141 = load i32, i32* %arrayidx1.29, align 4, !tbaa !7 + %mul.29 = sub nsw i32 0, %141 + store i32 %mul.29, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %142 = load i32, i32* %arrayidx1.30, align 4, !tbaa !7 + %mul.30 = sub nsw i32 0, %142 + store i32 %mul.30, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %143 = load i32, i32* %arrayidx1.31, align 4, !tbaa !7 + %mul.31 = sub nsw i32 0, %143 + store i32 %mul.31, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %144 = load i32, i32* %arrayidx1.32, align 4, !tbaa !7 + %mul.32 = sub nsw i32 0, %144 + store i32 %mul.32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %145 = load i32, i32* %arrayidx1.33, align 4, !tbaa !7 + %mul.33 = sub nsw i32 0, %145 + store i32 %mul.33, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %146 = load i32, i32* %arrayidx1.34, align 4, !tbaa !7 + %mul.34 = sub nsw i32 0, %146 + store i32 %mul.34, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %147 = load i32, i32* %arrayidx1.35, align 4, !tbaa !7 + %mul.35 = sub nsw i32 0, %147 + store i32 %mul.35, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %148 = load i32, i32* %arrayidx1.36, align 4, !tbaa !7 + %mul.36 = sub nsw i32 0, %148 + store i32 %mul.36, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %149 = load i32, i32* %arrayidx1.37, align 4, !tbaa !7 + %mul.37 = sub nsw i32 0, %149 + store i32 %mul.37, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %150 = load i32, i32* %arrayidx1.38, align 4, !tbaa !7 + %mul.38 = sub nsw i32 0, %150 + store i32 %mul.38, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %151 = load i32, i32* %arrayidx1.39, align 4, !tbaa !7 + %mul.39 = sub nsw i32 0, %151 + store i32 %mul.39, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %152 = load i32, i32* %arrayidx1.40, align 4, !tbaa !7 + %mul.40 = sub nsw i32 0, %152 + store i32 %mul.40, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %153 = load i32, i32* %arrayidx1.41, align 4, !tbaa !7 + %mul.41 = sub nsw i32 0, %153 + store i32 %mul.41, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %154 = load i32, i32* %arrayidx1.42, align 4, !tbaa !7 + %mul.42 = sub nsw i32 0, %154 + store i32 %mul.42, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %155 = load i32, i32* %arrayidx1.43, align 4, !tbaa !7 + %mul.43 = sub nsw i32 0, %155 + store i32 %mul.43, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %156 = load i32, i32* %arrayidx1.44, align 4, !tbaa !7 + %mul.44 = sub nsw i32 0, %156 + store i32 %mul.44, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %157 = load i32, i32* %arrayidx1.45, align 4, !tbaa !7 + %mul.45 = sub nsw i32 0, %157 + store i32 %mul.45, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %158 = load i32, i32* %arrayidx1.46, align 4, !tbaa !7 + %mul.46 = sub nsw i32 0, %158 + store i32 %mul.46, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %159 = load i32, i32* %arrayidx1.47, align 4, !tbaa !7 + %mul.47 = sub nsw i32 0, %159 + store i32 %mul.47, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %160 = load i32, i32* %arrayidx1.48, align 4, !tbaa !7 + %mul.48 = sub nsw i32 0, %160 + store i32 %mul.48, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %161 = load i32, i32* %arrayidx1.49, align 4, !tbaa !7 + %mul.49 = sub nsw i32 0, %161 + store i32 %mul.49, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %162 = load i32, i32* %arrayidx1.50, align 4, !tbaa !7 + %mul.50 = sub nsw i32 0, %162 + store i32 %mul.50, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %163 = load i32, i32* %arrayidx1.51, align 4, !tbaa !7 + %mul.51 = sub nsw i32 0, %163 + store i32 %mul.51, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %164 = load i32, i32* %arrayidx1.52, align 4, !tbaa !7 + %mul.52 = sub nsw i32 0, %164 + store i32 %mul.52, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %165 = load i32, i32* %arrayidx1.53, align 4, !tbaa !7 + %mul.53 = sub nsw i32 0, %165 + store i32 %mul.53, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %166 = load i32, i32* %arrayidx1.54, align 4, !tbaa !7 + %mul.54 = sub nsw i32 0, %166 + store i32 %mul.54, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %167 = load i32, i32* %arrayidx1.55, align 4, !tbaa !7 + %mul.55 = sub nsw i32 0, %167 + store i32 %mul.55, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %168 = load i32, i32* %arrayidx1.56, align 4, !tbaa !7 + %mul.56 = sub nsw i32 0, %168 + store i32 %mul.56, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %169 = load i32, i32* %arrayidx1.57, align 4, !tbaa !7 + %mul.57 = sub nsw i32 0, %169 + store i32 %mul.57, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %170 = load i32, i32* %arrayidx1.58, align 4, !tbaa !7 + %mul.58 = sub nsw i32 0, %170 + store i32 %mul.58, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %171 = load i32, i32* %arrayidx1.59, align 4, !tbaa !7 + %mul.59 = sub nsw i32 0, %171 + store i32 %mul.59, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %172 = load i32, i32* %arrayidx1.60, align 4, !tbaa !7 + %mul.60 = sub nsw i32 0, %172 + store i32 %mul.60, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %173 = load i32, i32* %arrayidx1.61, align 4, !tbaa !7 + %mul.61 = sub nsw i32 0, %173 + store i32 %mul.61, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %174 = load i32, i32* %arrayidx1.62, align 4, !tbaa !7 + %mul.62 = sub nsw i32 0, %174 + store i32 %mul.62, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %175 = load i32, i32* %arrayidx1.63, align 4, !tbaa !7 + %mul.63 = sub nsw i32 0, %175 + store i32 %mul.63, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %176 = load i32, i32* %arrayidx1.64, align 4, !tbaa !7 + %mul.64 = sub nsw i32 0, %176 + store i32 %mul.64, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %177 = load i32, i32* %arrayidx1.65, align 4, !tbaa !7 + %mul.65 = sub nsw i32 0, %177 + store i32 %mul.65, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %178 = load i32, i32* %arrayidx1.66, align 4, !tbaa !7 + %mul.66 = sub nsw i32 0, %178 + store i32 %mul.66, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %179 = load i32, i32* %arrayidx1.67, align 4, !tbaa !7 + %mul.67 = sub nsw i32 0, %179 + store i32 %mul.67, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %180 = load i32, i32* %arrayidx1.68, align 4, !tbaa !7 + %mul.68 = sub nsw i32 0, %180 + store i32 %mul.68, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %181 = load i32, i32* %arrayidx1.69, align 4, !tbaa !7 + %mul.69 = sub nsw i32 0, %181 + store i32 %mul.69, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %182 = load i32, i32* %arrayidx1.70, align 4, !tbaa !7 + %mul.70 = sub nsw i32 0, %182 + store i32 %mul.70, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %183 = load i32, i32* %arrayidx1.71, align 4, !tbaa !7 + %mul.71 = sub nsw i32 0, %183 + store i32 %mul.71, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %184 = load i32, i32* %arrayidx1.72, align 4, !tbaa !7 + %mul.72 = sub nsw i32 0, %184 + store i32 %mul.72, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %185 = load i32, i32* %arrayidx1.73, align 4, !tbaa !7 + %mul.73 = sub nsw i32 0, %185 + store i32 %mul.73, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %186 = load i32, i32* %arrayidx1.74, align 4, !tbaa !7 + %mul.74 = sub nsw i32 0, %186 + store i32 %mul.74, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %187 = load i32, i32* %arrayidx1.75, align 4, !tbaa !7 + %mul.75 = sub nsw i32 0, %187 + store i32 %mul.75, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %188 = load i32, i32* %arrayidx1.76, align 4, !tbaa !7 + %mul.76 = sub nsw i32 0, %188 + store i32 %mul.76, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %189 = load i32, i32* %arrayidx1.77, align 4, !tbaa !7 + %mul.77 = sub nsw i32 0, %189 + store i32 %mul.77, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %190 = load i32, i32* %arrayidx1.78, align 4, !tbaa !7 + %mul.78 = sub nsw i32 0, %190 + store i32 %mul.78, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %191 = load i32, i32* %arrayidx1.79, align 4, !tbaa !7 + %mul.79 = sub nsw i32 0, %191 + store i32 %mul.79, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %192 = load i32, i32* %arrayidx1.80, align 4, !tbaa !7 + %mul.80 = sub nsw i32 0, %192 + store i32 %mul.80, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %193 = load i32, i32* %arrayidx1.81, align 4, !tbaa !7 + %mul.81 = sub nsw i32 0, %193 + store i32 %mul.81, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %194 = load i32, i32* %arrayidx1.82, align 4, !tbaa !7 + %mul.82 = sub nsw i32 0, %194 + store i32 %mul.82, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %195 = load i32, i32* %arrayidx1.83, align 4, !tbaa !7 + %mul.83 = sub nsw i32 0, %195 + store i32 %mul.83, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %196 = load i32, i32* %arrayidx1.84, align 4, !tbaa !7 + %mul.84 = sub nsw i32 0, %196 + store i32 %mul.84, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %197 = load i32, i32* %arrayidx1.85, align 4, !tbaa !7 + %mul.85 = sub nsw i32 0, %197 + store i32 %mul.85, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %198 = load i32, i32* %arrayidx1.86, align 4, !tbaa !7 + %mul.86 = sub nsw i32 0, %198 + store i32 %mul.86, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %199 = load i32, i32* %arrayidx1.87, align 4, !tbaa !7 + %mul.87 = sub nsw i32 0, %199 + store i32 %mul.87, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %200 = load i32, i32* %arrayidx1.88, align 4, !tbaa !7 + %mul.88 = sub nsw i32 0, %200 + store i32 %mul.88, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %201 = load i32, i32* %arrayidx1.89, align 4, !tbaa !7 + %mul.89 = sub nsw i32 0, %201 + store i32 %mul.89, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %202 = load i32, i32* %arrayidx1.90, align 4, !tbaa !7 + %mul.90 = sub nsw i32 0, %202 + store i32 %mul.90, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %203 = load i32, i32* %arrayidx1.91, align 4, !tbaa !7 + %mul.91 = sub nsw i32 0, %203 + store i32 %mul.91, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %204 = load i32, i32* %arrayidx1.92, align 4, !tbaa !7 + %mul.92 = sub nsw i32 0, %204 + store i32 %mul.92, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %205 = load i32, i32* %arrayidx1.93, align 4, !tbaa !7 + %mul.93 = sub nsw i32 0, %205 + store i32 %mul.93, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %206 = load i32, i32* %arrayidx1.94, align 4, !tbaa !7 + %mul.94 = sub nsw i32 0, %206 + store i32 %mul.94, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %207 = load i32, i32* %arrayidx1.95, align 4, !tbaa !7 + %mul.95 = sub nsw i32 0, %207 + store i32 %mul.95, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %208 = load i32, i32* %arrayidx1.96, align 4, !tbaa !7 + %mul.96 = sub nsw i32 0, %208 + store i32 %mul.96, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %209 = load i32, i32* %arrayidx1.97, align 4, !tbaa !7 + %mul.97 = sub nsw i32 0, %209 + store i32 %mul.97, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %210 = load i32, i32* %arrayidx1.98, align 4, !tbaa !7 + %mul.98 = sub nsw i32 0, %210 + store i32 %mul.98, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %211 = load i32, i32* %arrayidx1.99, align 4, !tbaa !7 + %mul.99 = sub nsw i32 0, %211 + store i32 %mul.99, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %212 = load i32, i32* %arrayidx1.100, align 4, !tbaa !7 + %mul.100 = sub nsw i32 0, %212 + store i32 %mul.100, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %213 = load i32, i32* %arrayidx1.101, align 4, !tbaa !7 + %mul.101 = sub nsw i32 0, %213 + store i32 %mul.101, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %214 = load i32, i32* %arrayidx1.102, align 4, !tbaa !7 + %mul.102 = sub nsw i32 0, %214 + store i32 %mul.102, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %215 = load i32, i32* %arrayidx1.103, align 4, !tbaa !7 + %mul.103 = sub nsw i32 0, %215 + store i32 %mul.103, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %216 = load i32, i32* %arrayidx1.104, align 4, !tbaa !7 + %mul.104 = sub nsw i32 0, %216 + store i32 %mul.104, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %217 = load i32, i32* %arrayidx1.105, align 4, !tbaa !7 + %mul.105 = sub nsw i32 0, %217 + store i32 %mul.105, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %218 = load i32, i32* %arrayidx1.106, align 4, !tbaa !7 + %mul.106 = sub nsw i32 0, %218 + store i32 %mul.106, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %219 = load i32, i32* %arrayidx1.107, align 4, !tbaa !7 + %mul.107 = sub nsw i32 0, %219 + store i32 %mul.107, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %220 = load i32, i32* %arrayidx1.108, align 4, !tbaa !7 + %mul.108 = sub nsw i32 0, %220 + store i32 %mul.108, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %221 = load i32, i32* %arrayidx1.109, align 4, !tbaa !7 + %mul.109 = sub nsw i32 0, %221 + store i32 %mul.109, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %222 = load i32, i32* %arrayidx1.110, align 4, !tbaa !7 + %mul.110 = sub nsw i32 0, %222 + store i32 %mul.110, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + call void @llvm.lifetime.end(i64 444, i8* %0) #2 + ret void +} +attributes #3 = { nounwind "amdgpu-num-active-waves-per-eu"="5,5" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="fiji" "target-features"="+16-bit-insts,+s-memrealtime" "unsafe-fp-math"="false" "use-soft-float"="false" } + +; Exactly 10 active waves per execution unit. +; CHECK: SGPRBlocks: 1 +; CHECK: VGPRBlocks: 5 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 11 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 24 +define void @many_regs_exactly_10(i32 addrspace(1)* nocapture %A) #4 { +entry: + %a = alloca [111 x i32], align 4 + %0 = bitcast [111 x i32]* %a to i8* + call void @llvm.lifetime.start(i64 444, i8* %0) #2 + %1 = load i32, i32 addrspace(1)* %A, align 4, !tbaa !7 + %arrayidx1 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 0 + store i32 %1, i32* %arrayidx1, align 4, !tbaa !7 + %arrayidx.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 1 + %2 = load i32, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %arrayidx1.1 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 1 + store i32 %2, i32* %arrayidx1.1, align 4, !tbaa !7 + %arrayidx.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 2 + %3 = load i32, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %arrayidx1.2 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 2 + store i32 %3, i32* %arrayidx1.2, align 4, !tbaa !7 + %arrayidx.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 3 + %4 = load i32, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %arrayidx1.3 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 3 + store i32 %4, i32* %arrayidx1.3, align 4, !tbaa !7 + %arrayidx.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 4 + %5 = load i32, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %arrayidx1.4 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 4 + store i32 %5, i32* %arrayidx1.4, align 4, !tbaa !7 + %arrayidx.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 5 + %6 = load i32, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %arrayidx1.5 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 5 + store i32 %6, i32* %arrayidx1.5, align 4, !tbaa !7 + %arrayidx.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 6 + %7 = load i32, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %arrayidx1.6 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 6 + store i32 %7, i32* %arrayidx1.6, align 4, !tbaa !7 + %arrayidx.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 7 + %8 = load i32, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %arrayidx1.7 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 7 + store i32 %8, i32* %arrayidx1.7, align 4, !tbaa !7 + %arrayidx.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 8 + %9 = load i32, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %arrayidx1.8 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 8 + store i32 %9, i32* %arrayidx1.8, align 4, !tbaa !7 + %arrayidx.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 9 + %10 = load i32, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %arrayidx1.9 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 9 + store i32 %10, i32* %arrayidx1.9, align 4, !tbaa !7 + %arrayidx.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 10 + %11 = load i32, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %arrayidx1.10 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 10 + store i32 %11, i32* %arrayidx1.10, align 4, !tbaa !7 + %arrayidx.11 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 11 + %12 = load i32, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %arrayidx1.11 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 11 + store i32 %12, i32* %arrayidx1.11, align 4, !tbaa !7 + %arrayidx.12 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 12 + %13 = load i32, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %arrayidx1.12 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 12 + store i32 %13, i32* %arrayidx1.12, align 4, !tbaa !7 + %arrayidx.13 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 13 + %14 = load i32, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %arrayidx1.13 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 13 + store i32 %14, i32* %arrayidx1.13, align 4, !tbaa !7 + %arrayidx.14 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 14 + %15 = load i32, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %arrayidx1.14 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 14 + store i32 %15, i32* %arrayidx1.14, align 4, !tbaa !7 + %arrayidx.15 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 15 + %16 = load i32, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %arrayidx1.15 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 15 + store i32 %16, i32* %arrayidx1.15, align 4, !tbaa !7 + %arrayidx.16 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 16 + %17 = load i32, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %arrayidx1.16 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 16 + store i32 %17, i32* %arrayidx1.16, align 4, !tbaa !7 + %arrayidx.17 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 17 + %18 = load i32, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %arrayidx1.17 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 17 + store i32 %18, i32* %arrayidx1.17, align 4, !tbaa !7 + %arrayidx.18 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 18 + %19 = load i32, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %arrayidx1.18 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 18 + store i32 %19, i32* %arrayidx1.18, align 4, !tbaa !7 + %arrayidx.19 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 19 + %20 = load i32, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %arrayidx1.19 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 19 + store i32 %20, i32* %arrayidx1.19, align 4, !tbaa !7 + %arrayidx.20 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 20 + %21 = load i32, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %arrayidx1.20 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 20 + store i32 %21, i32* %arrayidx1.20, align 4, !tbaa !7 + %arrayidx.21 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 21 + %22 = load i32, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %arrayidx1.21 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 21 + store i32 %22, i32* %arrayidx1.21, align 4, !tbaa !7 + %arrayidx.22 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 22 + %23 = load i32, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %arrayidx1.22 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 22 + store i32 %23, i32* %arrayidx1.22, align 4, !tbaa !7 + %arrayidx.23 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 23 + %24 = load i32, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %arrayidx1.23 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 23 + store i32 %24, i32* %arrayidx1.23, align 4, !tbaa !7 + %arrayidx.24 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 24 + %25 = load i32, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %arrayidx1.24 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 24 + store i32 %25, i32* %arrayidx1.24, align 4, !tbaa !7 + %arrayidx.25 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 25 + %26 = load i32, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %arrayidx1.25 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 25 + store i32 %26, i32* %arrayidx1.25, align 4, !tbaa !7 + %arrayidx.26 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 26 + %27 = load i32, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %arrayidx1.26 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 26 + store i32 %27, i32* %arrayidx1.26, align 4, !tbaa !7 + %arrayidx.27 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 27 + %28 = load i32, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %arrayidx1.27 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 27 + store i32 %28, i32* %arrayidx1.27, align 4, !tbaa !7 + %arrayidx.28 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 28 + %29 = load i32, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %arrayidx1.28 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 28 + store i32 %29, i32* %arrayidx1.28, align 4, !tbaa !7 + %arrayidx.29 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 29 + %30 = load i32, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %arrayidx1.29 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 29 + store i32 %30, i32* %arrayidx1.29, align 4, !tbaa !7 + %arrayidx.30 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 30 + %31 = load i32, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %arrayidx1.30 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 30 + store i32 %31, i32* %arrayidx1.30, align 4, !tbaa !7 + %arrayidx.31 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 31 + %32 = load i32, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %arrayidx1.31 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 31 + store i32 %32, i32* %arrayidx1.31, align 4, !tbaa !7 + %arrayidx.32 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 32 + %33 = load i32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %arrayidx1.32 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 32 + store i32 %33, i32* %arrayidx1.32, align 4, !tbaa !7 + %arrayidx.33 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 33 + %34 = load i32, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %arrayidx1.33 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 33 + store i32 %34, i32* %arrayidx1.33, align 4, !tbaa !7 + %arrayidx.34 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 34 + %35 = load i32, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %arrayidx1.34 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 34 + store i32 %35, i32* %arrayidx1.34, align 4, !tbaa !7 + %arrayidx.35 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 35 + %36 = load i32, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %arrayidx1.35 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 35 + store i32 %36, i32* %arrayidx1.35, align 4, !tbaa !7 + %arrayidx.36 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 36 + %37 = load i32, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %arrayidx1.36 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 36 + store i32 %37, i32* %arrayidx1.36, align 4, !tbaa !7 + %arrayidx.37 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 37 + %38 = load i32, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %arrayidx1.37 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 37 + store i32 %38, i32* %arrayidx1.37, align 4, !tbaa !7 + %arrayidx.38 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 38 + %39 = load i32, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %arrayidx1.38 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 38 + store i32 %39, i32* %arrayidx1.38, align 4, !tbaa !7 + %arrayidx.39 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 39 + %40 = load i32, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %arrayidx1.39 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 39 + store i32 %40, i32* %arrayidx1.39, align 4, !tbaa !7 + %arrayidx.40 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 40 + %41 = load i32, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %arrayidx1.40 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 40 + store i32 %41, i32* %arrayidx1.40, align 4, !tbaa !7 + %arrayidx.41 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 41 + %42 = load i32, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %arrayidx1.41 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 41 + store i32 %42, i32* %arrayidx1.41, align 4, !tbaa !7 + %arrayidx.42 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 42 + %43 = load i32, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %arrayidx1.42 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 42 + store i32 %43, i32* %arrayidx1.42, align 4, !tbaa !7 + %arrayidx.43 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 43 + %44 = load i32, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %arrayidx1.43 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 43 + store i32 %44, i32* %arrayidx1.43, align 4, !tbaa !7 + %arrayidx.44 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 44 + %45 = load i32, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %arrayidx1.44 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 44 + store i32 %45, i32* %arrayidx1.44, align 4, !tbaa !7 + %arrayidx.45 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 45 + %46 = load i32, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %arrayidx1.45 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 45 + store i32 %46, i32* %arrayidx1.45, align 4, !tbaa !7 + %arrayidx.46 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 46 + %47 = load i32, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %arrayidx1.46 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 46 + store i32 %47, i32* %arrayidx1.46, align 4, !tbaa !7 + %arrayidx.47 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 47 + %48 = load i32, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %arrayidx1.47 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 47 + store i32 %48, i32* %arrayidx1.47, align 4, !tbaa !7 + %arrayidx.48 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 48 + %49 = load i32, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %arrayidx1.48 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 48 + store i32 %49, i32* %arrayidx1.48, align 4, !tbaa !7 + %arrayidx.49 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 49 + %50 = load i32, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %arrayidx1.49 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 49 + store i32 %50, i32* %arrayidx1.49, align 4, !tbaa !7 + %arrayidx.50 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 50 + %51 = load i32, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %arrayidx1.50 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 50 + store i32 %51, i32* %arrayidx1.50, align 4, !tbaa !7 + %arrayidx.51 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 51 + %52 = load i32, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %arrayidx1.51 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 51 + store i32 %52, i32* %arrayidx1.51, align 4, !tbaa !7 + %arrayidx.52 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 52 + %53 = load i32, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %arrayidx1.52 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 52 + store i32 %53, i32* %arrayidx1.52, align 4, !tbaa !7 + %arrayidx.53 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 53 + %54 = load i32, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %arrayidx1.53 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 53 + store i32 %54, i32* %arrayidx1.53, align 4, !tbaa !7 + %arrayidx.54 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 54 + %55 = load i32, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %arrayidx1.54 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 54 + store i32 %55, i32* %arrayidx1.54, align 4, !tbaa !7 + %arrayidx.55 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 55 + %56 = load i32, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %arrayidx1.55 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 55 + store i32 %56, i32* %arrayidx1.55, align 4, !tbaa !7 + %arrayidx.56 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 56 + %57 = load i32, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %arrayidx1.56 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 56 + store i32 %57, i32* %arrayidx1.56, align 4, !tbaa !7 + %arrayidx.57 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 57 + %58 = load i32, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %arrayidx1.57 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 57 + store i32 %58, i32* %arrayidx1.57, align 4, !tbaa !7 + %arrayidx.58 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 58 + %59 = load i32, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %arrayidx1.58 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 58 + store i32 %59, i32* %arrayidx1.58, align 4, !tbaa !7 + %arrayidx.59 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 59 + %60 = load i32, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %arrayidx1.59 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 59 + store i32 %60, i32* %arrayidx1.59, align 4, !tbaa !7 + %arrayidx.60 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 60 + %61 = load i32, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %arrayidx1.60 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 60 + store i32 %61, i32* %arrayidx1.60, align 4, !tbaa !7 + %arrayidx.61 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 61 + %62 = load i32, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %arrayidx1.61 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 61 + store i32 %62, i32* %arrayidx1.61, align 4, !tbaa !7 + %arrayidx.62 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 62 + %63 = load i32, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %arrayidx1.62 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 62 + store i32 %63, i32* %arrayidx1.62, align 4, !tbaa !7 + %arrayidx.63 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 63 + %64 = load i32, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %arrayidx1.63 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 63 + store i32 %64, i32* %arrayidx1.63, align 4, !tbaa !7 + %arrayidx.64 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 64 + %65 = load i32, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %arrayidx1.64 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 64 + store i32 %65, i32* %arrayidx1.64, align 4, !tbaa !7 + %arrayidx.65 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 65 + %66 = load i32, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %arrayidx1.65 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 65 + store i32 %66, i32* %arrayidx1.65, align 4, !tbaa !7 + %arrayidx.66 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 66 + %67 = load i32, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %arrayidx1.66 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 66 + store i32 %67, i32* %arrayidx1.66, align 4, !tbaa !7 + %arrayidx.67 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 67 + %68 = load i32, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %arrayidx1.67 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 67 + store i32 %68, i32* %arrayidx1.67, align 4, !tbaa !7 + %arrayidx.68 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 68 + %69 = load i32, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %arrayidx1.68 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 68 + store i32 %69, i32* %arrayidx1.68, align 4, !tbaa !7 + %arrayidx.69 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 69 + %70 = load i32, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %arrayidx1.69 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 69 + store i32 %70, i32* %arrayidx1.69, align 4, !tbaa !7 + %arrayidx.70 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 70 + %71 = load i32, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %arrayidx1.70 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 70 + store i32 %71, i32* %arrayidx1.70, align 4, !tbaa !7 + %arrayidx.71 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 71 + %72 = load i32, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %arrayidx1.71 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 71 + store i32 %72, i32* %arrayidx1.71, align 4, !tbaa !7 + %arrayidx.72 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 72 + %73 = load i32, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %arrayidx1.72 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 72 + store i32 %73, i32* %arrayidx1.72, align 4, !tbaa !7 + %arrayidx.73 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 73 + %74 = load i32, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %arrayidx1.73 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 73 + store i32 %74, i32* %arrayidx1.73, align 4, !tbaa !7 + %arrayidx.74 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 74 + %75 = load i32, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %arrayidx1.74 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 74 + store i32 %75, i32* %arrayidx1.74, align 4, !tbaa !7 + %arrayidx.75 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 75 + %76 = load i32, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %arrayidx1.75 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 75 + store i32 %76, i32* %arrayidx1.75, align 4, !tbaa !7 + %arrayidx.76 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 76 + %77 = load i32, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %arrayidx1.76 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 76 + store i32 %77, i32* %arrayidx1.76, align 4, !tbaa !7 + %arrayidx.77 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 77 + %78 = load i32, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %arrayidx1.77 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 77 + store i32 %78, i32* %arrayidx1.77, align 4, !tbaa !7 + %arrayidx.78 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 78 + %79 = load i32, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %arrayidx1.78 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 78 + store i32 %79, i32* %arrayidx1.78, align 4, !tbaa !7 + %arrayidx.79 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 79 + %80 = load i32, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %arrayidx1.79 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 79 + store i32 %80, i32* %arrayidx1.79, align 4, !tbaa !7 + %arrayidx.80 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 80 + %81 = load i32, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %arrayidx1.80 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 80 + store i32 %81, i32* %arrayidx1.80, align 4, !tbaa !7 + %arrayidx.81 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 81 + %82 = load i32, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %arrayidx1.81 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 81 + store i32 %82, i32* %arrayidx1.81, align 4, !tbaa !7 + %arrayidx.82 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 82 + %83 = load i32, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %arrayidx1.82 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 82 + store i32 %83, i32* %arrayidx1.82, align 4, !tbaa !7 + %arrayidx.83 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 83 + %84 = load i32, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %arrayidx1.83 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 83 + store i32 %84, i32* %arrayidx1.83, align 4, !tbaa !7 + %arrayidx.84 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 84 + %85 = load i32, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %arrayidx1.84 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 84 + store i32 %85, i32* %arrayidx1.84, align 4, !tbaa !7 + %arrayidx.85 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 85 + %86 = load i32, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %arrayidx1.85 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 85 + store i32 %86, i32* %arrayidx1.85, align 4, !tbaa !7 + %arrayidx.86 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 86 + %87 = load i32, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %arrayidx1.86 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 86 + store i32 %87, i32* %arrayidx1.86, align 4, !tbaa !7 + %arrayidx.87 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 87 + %88 = load i32, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %arrayidx1.87 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 87 + store i32 %88, i32* %arrayidx1.87, align 4, !tbaa !7 + %arrayidx.88 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 88 + %89 = load i32, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %arrayidx1.88 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 88 + store i32 %89, i32* %arrayidx1.88, align 4, !tbaa !7 + %arrayidx.89 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 89 + %90 = load i32, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %arrayidx1.89 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 89 + store i32 %90, i32* %arrayidx1.89, align 4, !tbaa !7 + %arrayidx.90 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 90 + %91 = load i32, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %arrayidx1.90 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 90 + store i32 %91, i32* %arrayidx1.90, align 4, !tbaa !7 + %arrayidx.91 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 91 + %92 = load i32, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %arrayidx1.91 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 91 + store i32 %92, i32* %arrayidx1.91, align 4, !tbaa !7 + %arrayidx.92 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 92 + %93 = load i32, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %arrayidx1.92 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 92 + store i32 %93, i32* %arrayidx1.92, align 4, !tbaa !7 + %arrayidx.93 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 93 + %94 = load i32, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %arrayidx1.93 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 93 + store i32 %94, i32* %arrayidx1.93, align 4, !tbaa !7 + %arrayidx.94 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 94 + %95 = load i32, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %arrayidx1.94 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 94 + store i32 %95, i32* %arrayidx1.94, align 4, !tbaa !7 + %arrayidx.95 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 95 + %96 = load i32, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %arrayidx1.95 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 95 + store i32 %96, i32* %arrayidx1.95, align 4, !tbaa !7 + %arrayidx.96 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 96 + %97 = load i32, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %arrayidx1.96 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 96 + store i32 %97, i32* %arrayidx1.96, align 4, !tbaa !7 + %arrayidx.97 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 97 + %98 = load i32, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %arrayidx1.97 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 97 + store i32 %98, i32* %arrayidx1.97, align 4, !tbaa !7 + %arrayidx.98 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 98 + %99 = load i32, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %arrayidx1.98 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 98 + store i32 %99, i32* %arrayidx1.98, align 4, !tbaa !7 + %arrayidx.99 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 99 + %100 = load i32, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %arrayidx1.99 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 99 + store i32 %100, i32* %arrayidx1.99, align 4, !tbaa !7 + %arrayidx.100 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 100 + %101 = load i32, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %arrayidx1.100 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 100 + store i32 %101, i32* %arrayidx1.100, align 4, !tbaa !7 + %arrayidx.101 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 101 + %102 = load i32, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %arrayidx1.101 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 101 + store i32 %102, i32* %arrayidx1.101, align 4, !tbaa !7 + %arrayidx.102 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 102 + %103 = load i32, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %arrayidx1.102 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 102 + store i32 %103, i32* %arrayidx1.102, align 4, !tbaa !7 + %arrayidx.103 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 103 + %104 = load i32, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %arrayidx1.103 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 103 + store i32 %104, i32* %arrayidx1.103, align 4, !tbaa !7 + %arrayidx.104 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 104 + %105 = load i32, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %arrayidx1.104 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 104 + store i32 %105, i32* %arrayidx1.104, align 4, !tbaa !7 + %arrayidx.105 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 105 + %106 = load i32, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %arrayidx1.105 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 105 + store i32 %106, i32* %arrayidx1.105, align 4, !tbaa !7 + %arrayidx.106 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 106 + %107 = load i32, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %arrayidx1.106 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 106 + store i32 %107, i32* %arrayidx1.106, align 4, !tbaa !7 + %arrayidx.107 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 107 + %108 = load i32, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %arrayidx1.107 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 107 + store i32 %108, i32* %arrayidx1.107, align 4, !tbaa !7 + %arrayidx.108 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 108 + %109 = load i32, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %arrayidx1.108 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 108 + store i32 %109, i32* %arrayidx1.108, align 4, !tbaa !7 + %arrayidx.109 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 109 + %110 = load i32, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %arrayidx1.109 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 109 + store i32 %110, i32* %arrayidx1.109, align 4, !tbaa !7 + %arrayidx.110 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 110 + %111 = load i32, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + %arrayidx1.110 = getelementptr inbounds [111 x i32], [111 x i32]* %a, i32 0, i32 110 + store i32 %111, i32* %arrayidx1.110, align 4, !tbaa !7 + %112 = load i32, i32* %arrayidx1, align 4, !tbaa !7 + %mul = sub nsw i32 0, %112 + store i32 %mul, i32 addrspace(1)* %A, align 4, !tbaa !7 + %113 = load i32, i32* %arrayidx1.1, align 4, !tbaa !7 + %mul.1 = sub nsw i32 0, %113 + store i32 %mul.1, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %114 = load i32, i32* %arrayidx1.2, align 4, !tbaa !7 + %mul.2 = sub nsw i32 0, %114 + store i32 %mul.2, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %115 = load i32, i32* %arrayidx1.3, align 4, !tbaa !7 + %mul.3 = sub nsw i32 0, %115 + store i32 %mul.3, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %116 = load i32, i32* %arrayidx1.4, align 4, !tbaa !7 + %mul.4 = sub nsw i32 0, %116 + store i32 %mul.4, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %117 = load i32, i32* %arrayidx1.5, align 4, !tbaa !7 + %mul.5 = sub nsw i32 0, %117 + store i32 %mul.5, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %118 = load i32, i32* %arrayidx1.6, align 4, !tbaa !7 + %mul.6 = sub nsw i32 0, %118 + store i32 %mul.6, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %119 = load i32, i32* %arrayidx1.7, align 4, !tbaa !7 + %mul.7 = sub nsw i32 0, %119 + store i32 %mul.7, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %120 = load i32, i32* %arrayidx1.8, align 4, !tbaa !7 + %mul.8 = sub nsw i32 0, %120 + store i32 %mul.8, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %121 = load i32, i32* %arrayidx1.9, align 4, !tbaa !7 + %mul.9 = sub nsw i32 0, %121 + store i32 %mul.9, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %122 = load i32, i32* %arrayidx1.10, align 4, !tbaa !7 + %mul.10 = sub nsw i32 0, %122 + store i32 %mul.10, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %123 = load i32, i32* %arrayidx1.11, align 4, !tbaa !7 + %mul.11 = sub nsw i32 0, %123 + store i32 %mul.11, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %124 = load i32, i32* %arrayidx1.12, align 4, !tbaa !7 + %mul.12 = sub nsw i32 0, %124 + store i32 %mul.12, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %125 = load i32, i32* %arrayidx1.13, align 4, !tbaa !7 + %mul.13 = sub nsw i32 0, %125 + store i32 %mul.13, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %126 = load i32, i32* %arrayidx1.14, align 4, !tbaa !7 + %mul.14 = sub nsw i32 0, %126 + store i32 %mul.14, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %127 = load i32, i32* %arrayidx1.15, align 4, !tbaa !7 + %mul.15 = sub nsw i32 0, %127 + store i32 %mul.15, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %128 = load i32, i32* %arrayidx1.16, align 4, !tbaa !7 + %mul.16 = sub nsw i32 0, %128 + store i32 %mul.16, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %129 = load i32, i32* %arrayidx1.17, align 4, !tbaa !7 + %mul.17 = sub nsw i32 0, %129 + store i32 %mul.17, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %130 = load i32, i32* %arrayidx1.18, align 4, !tbaa !7 + %mul.18 = sub nsw i32 0, %130 + store i32 %mul.18, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %131 = load i32, i32* %arrayidx1.19, align 4, !tbaa !7 + %mul.19 = sub nsw i32 0, %131 + store i32 %mul.19, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %132 = load i32, i32* %arrayidx1.20, align 4, !tbaa !7 + %mul.20 = sub nsw i32 0, %132 + store i32 %mul.20, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %133 = load i32, i32* %arrayidx1.21, align 4, !tbaa !7 + %mul.21 = sub nsw i32 0, %133 + store i32 %mul.21, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %134 = load i32, i32* %arrayidx1.22, align 4, !tbaa !7 + %mul.22 = sub nsw i32 0, %134 + store i32 %mul.22, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %135 = load i32, i32* %arrayidx1.23, align 4, !tbaa !7 + %mul.23 = sub nsw i32 0, %135 + store i32 %mul.23, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %136 = load i32, i32* %arrayidx1.24, align 4, !tbaa !7 + %mul.24 = sub nsw i32 0, %136 + store i32 %mul.24, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %137 = load i32, i32* %arrayidx1.25, align 4, !tbaa !7 + %mul.25 = sub nsw i32 0, %137 + store i32 %mul.25, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %138 = load i32, i32* %arrayidx1.26, align 4, !tbaa !7 + %mul.26 = sub nsw i32 0, %138 + store i32 %mul.26, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %139 = load i32, i32* %arrayidx1.27, align 4, !tbaa !7 + %mul.27 = sub nsw i32 0, %139 + store i32 %mul.27, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %140 = load i32, i32* %arrayidx1.28, align 4, !tbaa !7 + %mul.28 = sub nsw i32 0, %140 + store i32 %mul.28, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %141 = load i32, i32* %arrayidx1.29, align 4, !tbaa !7 + %mul.29 = sub nsw i32 0, %141 + store i32 %mul.29, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %142 = load i32, i32* %arrayidx1.30, align 4, !tbaa !7 + %mul.30 = sub nsw i32 0, %142 + store i32 %mul.30, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %143 = load i32, i32* %arrayidx1.31, align 4, !tbaa !7 + %mul.31 = sub nsw i32 0, %143 + store i32 %mul.31, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %144 = load i32, i32* %arrayidx1.32, align 4, !tbaa !7 + %mul.32 = sub nsw i32 0, %144 + store i32 %mul.32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %145 = load i32, i32* %arrayidx1.33, align 4, !tbaa !7 + %mul.33 = sub nsw i32 0, %145 + store i32 %mul.33, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %146 = load i32, i32* %arrayidx1.34, align 4, !tbaa !7 + %mul.34 = sub nsw i32 0, %146 + store i32 %mul.34, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %147 = load i32, i32* %arrayidx1.35, align 4, !tbaa !7 + %mul.35 = sub nsw i32 0, %147 + store i32 %mul.35, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %148 = load i32, i32* %arrayidx1.36, align 4, !tbaa !7 + %mul.36 = sub nsw i32 0, %148 + store i32 %mul.36, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %149 = load i32, i32* %arrayidx1.37, align 4, !tbaa !7 + %mul.37 = sub nsw i32 0, %149 + store i32 %mul.37, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %150 = load i32, i32* %arrayidx1.38, align 4, !tbaa !7 + %mul.38 = sub nsw i32 0, %150 + store i32 %mul.38, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %151 = load i32, i32* %arrayidx1.39, align 4, !tbaa !7 + %mul.39 = sub nsw i32 0, %151 + store i32 %mul.39, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %152 = load i32, i32* %arrayidx1.40, align 4, !tbaa !7 + %mul.40 = sub nsw i32 0, %152 + store i32 %mul.40, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %153 = load i32, i32* %arrayidx1.41, align 4, !tbaa !7 + %mul.41 = sub nsw i32 0, %153 + store i32 %mul.41, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %154 = load i32, i32* %arrayidx1.42, align 4, !tbaa !7 + %mul.42 = sub nsw i32 0, %154 + store i32 %mul.42, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %155 = load i32, i32* %arrayidx1.43, align 4, !tbaa !7 + %mul.43 = sub nsw i32 0, %155 + store i32 %mul.43, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %156 = load i32, i32* %arrayidx1.44, align 4, !tbaa !7 + %mul.44 = sub nsw i32 0, %156 + store i32 %mul.44, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %157 = load i32, i32* %arrayidx1.45, align 4, !tbaa !7 + %mul.45 = sub nsw i32 0, %157 + store i32 %mul.45, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %158 = load i32, i32* %arrayidx1.46, align 4, !tbaa !7 + %mul.46 = sub nsw i32 0, %158 + store i32 %mul.46, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %159 = load i32, i32* %arrayidx1.47, align 4, !tbaa !7 + %mul.47 = sub nsw i32 0, %159 + store i32 %mul.47, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %160 = load i32, i32* %arrayidx1.48, align 4, !tbaa !7 + %mul.48 = sub nsw i32 0, %160 + store i32 %mul.48, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %161 = load i32, i32* %arrayidx1.49, align 4, !tbaa !7 + %mul.49 = sub nsw i32 0, %161 + store i32 %mul.49, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %162 = load i32, i32* %arrayidx1.50, align 4, !tbaa !7 + %mul.50 = sub nsw i32 0, %162 + store i32 %mul.50, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %163 = load i32, i32* %arrayidx1.51, align 4, !tbaa !7 + %mul.51 = sub nsw i32 0, %163 + store i32 %mul.51, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %164 = load i32, i32* %arrayidx1.52, align 4, !tbaa !7 + %mul.52 = sub nsw i32 0, %164 + store i32 %mul.52, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %165 = load i32, i32* %arrayidx1.53, align 4, !tbaa !7 + %mul.53 = sub nsw i32 0, %165 + store i32 %mul.53, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %166 = load i32, i32* %arrayidx1.54, align 4, !tbaa !7 + %mul.54 = sub nsw i32 0, %166 + store i32 %mul.54, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %167 = load i32, i32* %arrayidx1.55, align 4, !tbaa !7 + %mul.55 = sub nsw i32 0, %167 + store i32 %mul.55, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %168 = load i32, i32* %arrayidx1.56, align 4, !tbaa !7 + %mul.56 = sub nsw i32 0, %168 + store i32 %mul.56, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %169 = load i32, i32* %arrayidx1.57, align 4, !tbaa !7 + %mul.57 = sub nsw i32 0, %169 + store i32 %mul.57, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %170 = load i32, i32* %arrayidx1.58, align 4, !tbaa !7 + %mul.58 = sub nsw i32 0, %170 + store i32 %mul.58, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %171 = load i32, i32* %arrayidx1.59, align 4, !tbaa !7 + %mul.59 = sub nsw i32 0, %171 + store i32 %mul.59, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %172 = load i32, i32* %arrayidx1.60, align 4, !tbaa !7 + %mul.60 = sub nsw i32 0, %172 + store i32 %mul.60, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %173 = load i32, i32* %arrayidx1.61, align 4, !tbaa !7 + %mul.61 = sub nsw i32 0, %173 + store i32 %mul.61, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %174 = load i32, i32* %arrayidx1.62, align 4, !tbaa !7 + %mul.62 = sub nsw i32 0, %174 + store i32 %mul.62, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %175 = load i32, i32* %arrayidx1.63, align 4, !tbaa !7 + %mul.63 = sub nsw i32 0, %175 + store i32 %mul.63, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %176 = load i32, i32* %arrayidx1.64, align 4, !tbaa !7 + %mul.64 = sub nsw i32 0, %176 + store i32 %mul.64, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %177 = load i32, i32* %arrayidx1.65, align 4, !tbaa !7 + %mul.65 = sub nsw i32 0, %177 + store i32 %mul.65, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %178 = load i32, i32* %arrayidx1.66, align 4, !tbaa !7 + %mul.66 = sub nsw i32 0, %178 + store i32 %mul.66, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %179 = load i32, i32* %arrayidx1.67, align 4, !tbaa !7 + %mul.67 = sub nsw i32 0, %179 + store i32 %mul.67, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %180 = load i32, i32* %arrayidx1.68, align 4, !tbaa !7 + %mul.68 = sub nsw i32 0, %180 + store i32 %mul.68, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %181 = load i32, i32* %arrayidx1.69, align 4, !tbaa !7 + %mul.69 = sub nsw i32 0, %181 + store i32 %mul.69, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %182 = load i32, i32* %arrayidx1.70, align 4, !tbaa !7 + %mul.70 = sub nsw i32 0, %182 + store i32 %mul.70, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %183 = load i32, i32* %arrayidx1.71, align 4, !tbaa !7 + %mul.71 = sub nsw i32 0, %183 + store i32 %mul.71, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %184 = load i32, i32* %arrayidx1.72, align 4, !tbaa !7 + %mul.72 = sub nsw i32 0, %184 + store i32 %mul.72, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %185 = load i32, i32* %arrayidx1.73, align 4, !tbaa !7 + %mul.73 = sub nsw i32 0, %185 + store i32 %mul.73, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %186 = load i32, i32* %arrayidx1.74, align 4, !tbaa !7 + %mul.74 = sub nsw i32 0, %186 + store i32 %mul.74, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %187 = load i32, i32* %arrayidx1.75, align 4, !tbaa !7 + %mul.75 = sub nsw i32 0, %187 + store i32 %mul.75, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %188 = load i32, i32* %arrayidx1.76, align 4, !tbaa !7 + %mul.76 = sub nsw i32 0, %188 + store i32 %mul.76, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %189 = load i32, i32* %arrayidx1.77, align 4, !tbaa !7 + %mul.77 = sub nsw i32 0, %189 + store i32 %mul.77, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %190 = load i32, i32* %arrayidx1.78, align 4, !tbaa !7 + %mul.78 = sub nsw i32 0, %190 + store i32 %mul.78, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %191 = load i32, i32* %arrayidx1.79, align 4, !tbaa !7 + %mul.79 = sub nsw i32 0, %191 + store i32 %mul.79, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %192 = load i32, i32* %arrayidx1.80, align 4, !tbaa !7 + %mul.80 = sub nsw i32 0, %192 + store i32 %mul.80, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %193 = load i32, i32* %arrayidx1.81, align 4, !tbaa !7 + %mul.81 = sub nsw i32 0, %193 + store i32 %mul.81, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %194 = load i32, i32* %arrayidx1.82, align 4, !tbaa !7 + %mul.82 = sub nsw i32 0, %194 + store i32 %mul.82, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %195 = load i32, i32* %arrayidx1.83, align 4, !tbaa !7 + %mul.83 = sub nsw i32 0, %195 + store i32 %mul.83, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %196 = load i32, i32* %arrayidx1.84, align 4, !tbaa !7 + %mul.84 = sub nsw i32 0, %196 + store i32 %mul.84, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %197 = load i32, i32* %arrayidx1.85, align 4, !tbaa !7 + %mul.85 = sub nsw i32 0, %197 + store i32 %mul.85, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %198 = load i32, i32* %arrayidx1.86, align 4, !tbaa !7 + %mul.86 = sub nsw i32 0, %198 + store i32 %mul.86, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %199 = load i32, i32* %arrayidx1.87, align 4, !tbaa !7 + %mul.87 = sub nsw i32 0, %199 + store i32 %mul.87, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %200 = load i32, i32* %arrayidx1.88, align 4, !tbaa !7 + %mul.88 = sub nsw i32 0, %200 + store i32 %mul.88, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %201 = load i32, i32* %arrayidx1.89, align 4, !tbaa !7 + %mul.89 = sub nsw i32 0, %201 + store i32 %mul.89, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %202 = load i32, i32* %arrayidx1.90, align 4, !tbaa !7 + %mul.90 = sub nsw i32 0, %202 + store i32 %mul.90, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %203 = load i32, i32* %arrayidx1.91, align 4, !tbaa !7 + %mul.91 = sub nsw i32 0, %203 + store i32 %mul.91, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %204 = load i32, i32* %arrayidx1.92, align 4, !tbaa !7 + %mul.92 = sub nsw i32 0, %204 + store i32 %mul.92, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %205 = load i32, i32* %arrayidx1.93, align 4, !tbaa !7 + %mul.93 = sub nsw i32 0, %205 + store i32 %mul.93, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %206 = load i32, i32* %arrayidx1.94, align 4, !tbaa !7 + %mul.94 = sub nsw i32 0, %206 + store i32 %mul.94, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %207 = load i32, i32* %arrayidx1.95, align 4, !tbaa !7 + %mul.95 = sub nsw i32 0, %207 + store i32 %mul.95, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %208 = load i32, i32* %arrayidx1.96, align 4, !tbaa !7 + %mul.96 = sub nsw i32 0, %208 + store i32 %mul.96, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %209 = load i32, i32* %arrayidx1.97, align 4, !tbaa !7 + %mul.97 = sub nsw i32 0, %209 + store i32 %mul.97, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %210 = load i32, i32* %arrayidx1.98, align 4, !tbaa !7 + %mul.98 = sub nsw i32 0, %210 + store i32 %mul.98, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %211 = load i32, i32* %arrayidx1.99, align 4, !tbaa !7 + %mul.99 = sub nsw i32 0, %211 + store i32 %mul.99, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %212 = load i32, i32* %arrayidx1.100, align 4, !tbaa !7 + %mul.100 = sub nsw i32 0, %212 + store i32 %mul.100, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %213 = load i32, i32* %arrayidx1.101, align 4, !tbaa !7 + %mul.101 = sub nsw i32 0, %213 + store i32 %mul.101, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %214 = load i32, i32* %arrayidx1.102, align 4, !tbaa !7 + %mul.102 = sub nsw i32 0, %214 + store i32 %mul.102, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %215 = load i32, i32* %arrayidx1.103, align 4, !tbaa !7 + %mul.103 = sub nsw i32 0, %215 + store i32 %mul.103, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %216 = load i32, i32* %arrayidx1.104, align 4, !tbaa !7 + %mul.104 = sub nsw i32 0, %216 + store i32 %mul.104, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %217 = load i32, i32* %arrayidx1.105, align 4, !tbaa !7 + %mul.105 = sub nsw i32 0, %217 + store i32 %mul.105, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %218 = load i32, i32* %arrayidx1.106, align 4, !tbaa !7 + %mul.106 = sub nsw i32 0, %218 + store i32 %mul.106, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %219 = load i32, i32* %arrayidx1.107, align 4, !tbaa !7 + %mul.107 = sub nsw i32 0, %219 + store i32 %mul.107, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %220 = load i32, i32* %arrayidx1.108, align 4, !tbaa !7 + %mul.108 = sub nsw i32 0, %220 + store i32 %mul.108, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %221 = load i32, i32* %arrayidx1.109, align 4, !tbaa !7 + %mul.109 = sub nsw i32 0, %221 + store i32 %mul.109, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %222 = load i32, i32* %arrayidx1.110, align 4, !tbaa !7 + %mul.110 = sub nsw i32 0, %222 + store i32 %mul.110, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + call void @llvm.lifetime.end(i64 444, i8* %0) #2 + ret void +} +attributes #4 = { nounwind "amdgpu-num-active-waves-per-eu"="10,10" "amdgpu-flat-work-group-size"="256,256" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="fiji" "target-features"="+16-bit-insts,+s-memrealtime" "unsafe-fp-math"="false" "use-soft-float"="false" } + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.start(i64, i8* nocapture) #1 + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.end(i64, i8* nocapture) #1 + +attributes #1 = { argmemonly nounwind } +attributes #2 = { nounwind } + +!llvm.ident = !{!6} + +!1 = !{!"kernel_arg_addr_space", i32 1} +!2 = !{!"kernel_arg_access_qual", !"none"} +!3 = !{!"kernel_arg_type", !"int*"} +!4 = !{!"kernel_arg_base_type", !"int*"} +!5 = !{!"kernel_arg_type_qual", !""} +!6 = !{!"clang version 3.9.0 (trunk 272684)"} +!7 = !{!8, !8, i64 0} +!8 = !{!"int", !9, i64 0} +!9 = !{!"omnipotent char", !10, i64 0} +!10 = !{!"Simple C/C++ TBAA"} Index: test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-num-active-waves-per-eu.ll @@ -0,0 +1,104 @@ +; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck %s + +; Exactly 1 active wave per execution unit. +; CHECK: SGPRBlocks: 12 +; CHECK: VGPRBlocks: 32 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 97 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 129 +define void @empty_exactly_1() #0 { +entry: + ret void +} +attributes #0 = {"amdgpu-num-active-waves-per-eu"="1,1"} + +; Exactly 5 active waves per execution unit. +; CHECK: SGPRBlocks: 12 +; CHECK: VGPRBlocks: 10 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 97 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 41 +define void @empty_exactly_5() #1 { +entry: + ret void +} +attributes #1 = {"amdgpu-num-active-waves-per-eu"="5,5"} + +; Exactly 10 active waves per execution unit. +; CHECK: SGPRBlocks: 0 +; CHECK: VGPRBlocks: 0 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 1 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 1 +define void @empty_exactly_10() #2 { +entry: + ret void +} +attributes #2 = {"amdgpu-num-active-waves-per-eu"="10,10" "amdgpu-flat-work-group-size"="256,256"} + +; At least 1 active wave per execution unit. +; CHECK: SGPRBlocks: 0 +; CHECK: VGPRBlocks: 0 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 1 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 1 +define void @empty_at_least_1() #3 { +entry: + ret void +} +attributes #3 = {"amdgpu-num-active-waves-per-eu"="1"} + +; At least 5 active waves per execution unit. +; CHECK: SGPRBlocks: 0 +; CHECK: VGPRBlocks: 0 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 1 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 1 +define void @empty_at_least_5() #4 { +entry: + ret void +} +attributes #4 = {"amdgpu-num-active-waves-per-eu"="5"} + +; At least 10 active waves per execution unit. +; CHECK: SGPRBlocks: 0 +; CHECK: VGPRBlocks: 0 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 1 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 1 +define void @empty_at_least_10() #5 { +entry: + ret void +} +attributes #5 = {"amdgpu-num-active-waves-per-eu"="10" "amdgpu-flat-work-group-size"="256,256"} + +; At most 1 active wave per execution unit (same as @empty_exactly_1). + +; At most 5 active waves per execution unit. +; CHECK: SGPRBlocks: 12 +; CHECK: VGPRBlocks: 10 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 97 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 41 +define void @empty_at_most_5() #6 { +entry: + ret void +} +attributes #6 = {"amdgpu-num-active-waves-per-eu"="1,5"} + +; At most 10 active waves per execution unit. +; CHECK: SGPRBlocks: 0 +; CHECK: VGPRBlocks: 0 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 1 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 1 +define void @empty_at_most_10() #7 { +entry: + ret void +} +attributes #7 = {"amdgpu-num-active-waves-per-eu"="1,10"} + +; Between 1 and 5 active waves per execution unit (same as @empty_at_most_5). + +; Between 5 and 10 active waves per execution unit. +; CHECK: SGPRBlocks: 0 +; CHECK: VGPRBlocks: 0 +; CHECK: NumSGPRsForNumActiveWavesPerEU: 1 +; CHECK: NumVGPRsForNumActiveWavesPerEU: 1 +define void @empty_between_5_and_10() #8 { +entry: + ret void +} +attributes #8 = {"amdgpu-num-active-waves-per-eu"="5,10"} Index: test/CodeGen/AMDGPU/attr-amdgpu-num-sgpr-invalid.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-num-sgpr-invalid.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-num-sgpr-invalid.ll @@ -0,0 +1,17 @@ +; RUN: not llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s 2>&1 | FileCheck %s + +; For fiji, 8 active waves per execution unit -> [81, 96] SGPRs can be used. + +; CHECK: invalid amdgpu-num-sgpr: requested number of SGPRs cannot be achieved with default or requested maximum number of active waves per execution unit +define void @invalid_0() #0 { +entry: + ret void +} +attributes #0 = {"amdgpu-num-sgpr"="80" "amdgpu-num-active-waves-per-eu"="8,8"} + +; CHECK: invalid amdgpu-num-sgpr: requested number of SGPRs cannot be achieved with default or requested minimum number of active waves per execution unit +define void @invalid_1() #1 { +entry: + ret void +} +attributes #1 = {"amdgpu-num-sgpr"="97" "amdgpu-num-active-waves-per-eu"="8,8"} Index: test/CodeGen/AMDGPU/attr-amdgpu-num-sgpr.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-num-sgpr.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-num-sgpr.ll @@ -0,0 +1,840 @@ +; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck %s + +source_filename = "attr-amdgpu-num-sgpr.cl" +target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64" +target triple = "amdgcn--amdhsa" + +; CHECK: NumSgprs: 16 +define void @attr_amdgpu_num_sgpr_16(i32 addrspace(1)* nocapture %A, i32 addrspace(1)* nocapture %B) local_unnamed_addr #0 { +entry: + %arr = alloca [222 x i32], align 4 + %0 = bitcast [222 x i32]* %arr to i8* + call void @llvm.lifetime.start(i64 888, i8* %0) #2 + %1 = load i32, i32 addrspace(1)* %A, align 4, !tbaa !7 + %add = add nsw i32 %1, 123 + %arrayidx1 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 0 + store i32 %add, i32* %arrayidx1, align 4, !tbaa !7 + %arrayidx.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 1 + %2 = load i32, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %add.1 = add nsw i32 %2, 123 + %arrayidx1.1 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 1 + store i32 %add.1, i32* %arrayidx1.1, align 4, !tbaa !7 + %arrayidx.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 2 + %3 = load i32, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %add.2 = add nsw i32 %3, 123 + %arrayidx1.2 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 2 + store i32 %add.2, i32* %arrayidx1.2, align 4, !tbaa !7 + %arrayidx.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 3 + %4 = load i32, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %add.3 = add nsw i32 %4, 123 + %arrayidx1.3 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 3 + store i32 %add.3, i32* %arrayidx1.3, align 4, !tbaa !7 + %arrayidx.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 4 + %5 = load i32, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %add.4 = add nsw i32 %5, 123 + %arrayidx1.4 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 4 + store i32 %add.4, i32* %arrayidx1.4, align 4, !tbaa !7 + %arrayidx.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 5 + %6 = load i32, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %add.5 = add nsw i32 %6, 123 + %arrayidx1.5 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 5 + store i32 %add.5, i32* %arrayidx1.5, align 4, !tbaa !7 + %arrayidx.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 6 + %7 = load i32, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %add.6 = add nsw i32 %7, 123 + %arrayidx1.6 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 6 + store i32 %add.6, i32* %arrayidx1.6, align 4, !tbaa !7 + %arrayidx.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 7 + %8 = load i32, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %add.7 = add nsw i32 %8, 123 + %arrayidx1.7 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 7 + store i32 %add.7, i32* %arrayidx1.7, align 4, !tbaa !7 + %arrayidx.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 8 + %9 = load i32, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %add.8 = add nsw i32 %9, 123 + %arrayidx1.8 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 8 + store i32 %add.8, i32* %arrayidx1.8, align 4, !tbaa !7 + %arrayidx.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 9 + %10 = load i32, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %add.9 = add nsw i32 %10, 123 + %arrayidx1.9 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 9 + store i32 %add.9, i32* %arrayidx1.9, align 4, !tbaa !7 + %arrayidx.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 10 + %11 = load i32, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %add.10 = add nsw i32 %11, 123 + %arrayidx1.10 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 10 + store i32 %add.10, i32* %arrayidx1.10, align 4, !tbaa !7 + %arrayidx.11 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 11 + %12 = load i32, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %add.11 = add nsw i32 %12, 123 + %arrayidx1.11 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 11 + store i32 %add.11, i32* %arrayidx1.11, align 4, !tbaa !7 + %arrayidx.12 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 12 + %13 = load i32, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %add.12 = add nsw i32 %13, 123 + %arrayidx1.12 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 12 + store i32 %add.12, i32* %arrayidx1.12, align 4, !tbaa !7 + %arrayidx.13 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 13 + %14 = load i32, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %add.13 = add nsw i32 %14, 123 + %arrayidx1.13 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 13 + store i32 %add.13, i32* %arrayidx1.13, align 4, !tbaa !7 + %arrayidx.14 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 14 + %15 = load i32, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %add.14 = add nsw i32 %15, 123 + %arrayidx1.14 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 14 + store i32 %add.14, i32* %arrayidx1.14, align 4, !tbaa !7 + %arrayidx.15 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 15 + %16 = load i32, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %add.15 = add nsw i32 %16, 123 + %arrayidx1.15 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 15 + store i32 %add.15, i32* %arrayidx1.15, align 4, !tbaa !7 + %arrayidx.16 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 16 + %17 = load i32, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %add.16 = add nsw i32 %17, 123 + %arrayidx1.16 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 16 + store i32 %add.16, i32* %arrayidx1.16, align 4, !tbaa !7 + %arrayidx.17 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 17 + %18 = load i32, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %add.17 = add nsw i32 %18, 123 + %arrayidx1.17 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 17 + store i32 %add.17, i32* %arrayidx1.17, align 4, !tbaa !7 + %arrayidx.18 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 18 + %19 = load i32, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %add.18 = add nsw i32 %19, 123 + %arrayidx1.18 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 18 + store i32 %add.18, i32* %arrayidx1.18, align 4, !tbaa !7 + %arrayidx.19 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 19 + %20 = load i32, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %add.19 = add nsw i32 %20, 123 + %arrayidx1.19 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 19 + store i32 %add.19, i32* %arrayidx1.19, align 4, !tbaa !7 + %arrayidx.20 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 20 + %21 = load i32, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %add.20 = add nsw i32 %21, 123 + %arrayidx1.20 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 20 + store i32 %add.20, i32* %arrayidx1.20, align 4, !tbaa !7 + %arrayidx.21 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 21 + %22 = load i32, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %add.21 = add nsw i32 %22, 123 + %arrayidx1.21 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 21 + store i32 %add.21, i32* %arrayidx1.21, align 4, !tbaa !7 + %arrayidx.22 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 22 + %23 = load i32, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %add.22 = add nsw i32 %23, 123 + %arrayidx1.22 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 22 + store i32 %add.22, i32* %arrayidx1.22, align 4, !tbaa !7 + %arrayidx.23 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 23 + %24 = load i32, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %add.23 = add nsw i32 %24, 123 + %arrayidx1.23 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 23 + store i32 %add.23, i32* %arrayidx1.23, align 4, !tbaa !7 + %arrayidx.24 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 24 + %25 = load i32, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %add.24 = add nsw i32 %25, 123 + %arrayidx1.24 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 24 + store i32 %add.24, i32* %arrayidx1.24, align 4, !tbaa !7 + %arrayidx.25 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 25 + %26 = load i32, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %add.25 = add nsw i32 %26, 123 + %arrayidx1.25 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 25 + store i32 %add.25, i32* %arrayidx1.25, align 4, !tbaa !7 + %arrayidx.26 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 26 + %27 = load i32, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %add.26 = add nsw i32 %27, 123 + %arrayidx1.26 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 26 + store i32 %add.26, i32* %arrayidx1.26, align 4, !tbaa !7 + %arrayidx.27 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 27 + %28 = load i32, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %add.27 = add nsw i32 %28, 123 + %arrayidx1.27 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 27 + store i32 %add.27, i32* %arrayidx1.27, align 4, !tbaa !7 + %arrayidx.28 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 28 + %29 = load i32, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %add.28 = add nsw i32 %29, 123 + %arrayidx1.28 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 28 + store i32 %add.28, i32* %arrayidx1.28, align 4, !tbaa !7 + %arrayidx.29 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 29 + %30 = load i32, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %add.29 = add nsw i32 %30, 123 + %arrayidx1.29 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 29 + store i32 %add.29, i32* %arrayidx1.29, align 4, !tbaa !7 + %arrayidx.30 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 30 + %31 = load i32, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %add.30 = add nsw i32 %31, 123 + %arrayidx1.30 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 30 + store i32 %add.30, i32* %arrayidx1.30, align 4, !tbaa !7 + %arrayidx.31 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 31 + %32 = load i32, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %add.31 = add nsw i32 %32, 123 + %arrayidx1.31 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 31 + store i32 %add.31, i32* %arrayidx1.31, align 4, !tbaa !7 + %arrayidx.32 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 32 + %33 = load i32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %add.32 = add nsw i32 %33, 123 + %arrayidx1.32 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 32 + store i32 %add.32, i32* %arrayidx1.32, align 4, !tbaa !7 + %arrayidx.33 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 33 + %34 = load i32, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %add.33 = add nsw i32 %34, 123 + %arrayidx1.33 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 33 + store i32 %add.33, i32* %arrayidx1.33, align 4, !tbaa !7 + %arrayidx.34 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 34 + %35 = load i32, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %add.34 = add nsw i32 %35, 123 + %arrayidx1.34 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 34 + store i32 %add.34, i32* %arrayidx1.34, align 4, !tbaa !7 + %arrayidx.35 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 35 + %36 = load i32, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %add.35 = add nsw i32 %36, 123 + %arrayidx1.35 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 35 + store i32 %add.35, i32* %arrayidx1.35, align 4, !tbaa !7 + %arrayidx.36 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 36 + %37 = load i32, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %add.36 = add nsw i32 %37, 123 + %arrayidx1.36 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 36 + store i32 %add.36, i32* %arrayidx1.36, align 4, !tbaa !7 + %arrayidx.37 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 37 + %38 = load i32, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %add.37 = add nsw i32 %38, 123 + %arrayidx1.37 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 37 + store i32 %add.37, i32* %arrayidx1.37, align 4, !tbaa !7 + %arrayidx.38 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 38 + %39 = load i32, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %add.38 = add nsw i32 %39, 123 + %arrayidx1.38 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 38 + store i32 %add.38, i32* %arrayidx1.38, align 4, !tbaa !7 + %arrayidx.39 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 39 + %40 = load i32, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %add.39 = add nsw i32 %40, 123 + %arrayidx1.39 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 39 + store i32 %add.39, i32* %arrayidx1.39, align 4, !tbaa !7 + %arrayidx.40 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 40 + %41 = load i32, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %add.40 = add nsw i32 %41, 123 + %arrayidx1.40 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 40 + store i32 %add.40, i32* %arrayidx1.40, align 4, !tbaa !7 + %arrayidx.41 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 41 + %42 = load i32, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %add.41 = add nsw i32 %42, 123 + %arrayidx1.41 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 41 + store i32 %add.41, i32* %arrayidx1.41, align 4, !tbaa !7 + %arrayidx.42 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 42 + %43 = load i32, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %add.42 = add nsw i32 %43, 123 + %arrayidx1.42 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 42 + store i32 %add.42, i32* %arrayidx1.42, align 4, !tbaa !7 + %arrayidx.43 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 43 + %44 = load i32, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %add.43 = add nsw i32 %44, 123 + %arrayidx1.43 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 43 + store i32 %add.43, i32* %arrayidx1.43, align 4, !tbaa !7 + %arrayidx.44 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 44 + %45 = load i32, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %add.44 = add nsw i32 %45, 123 + %arrayidx1.44 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 44 + store i32 %add.44, i32* %arrayidx1.44, align 4, !tbaa !7 + %arrayidx.45 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 45 + %46 = load i32, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %add.45 = add nsw i32 %46, 123 + %arrayidx1.45 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 45 + store i32 %add.45, i32* %arrayidx1.45, align 4, !tbaa !7 + %arrayidx.46 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 46 + %47 = load i32, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %add.46 = add nsw i32 %47, 123 + %arrayidx1.46 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 46 + store i32 %add.46, i32* %arrayidx1.46, align 4, !tbaa !7 + %arrayidx.47 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 47 + %48 = load i32, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %add.47 = add nsw i32 %48, 123 + %arrayidx1.47 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 47 + store i32 %add.47, i32* %arrayidx1.47, align 4, !tbaa !7 + %arrayidx.48 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 48 + %49 = load i32, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %add.48 = add nsw i32 %49, 123 + %arrayidx1.48 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 48 + store i32 %add.48, i32* %arrayidx1.48, align 4, !tbaa !7 + %arrayidx.49 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 49 + %50 = load i32, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %add.49 = add nsw i32 %50, 123 + %arrayidx1.49 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 49 + store i32 %add.49, i32* %arrayidx1.49, align 4, !tbaa !7 + %arrayidx.50 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 50 + %51 = load i32, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %add.50 = add nsw i32 %51, 123 + %arrayidx1.50 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 50 + store i32 %add.50, i32* %arrayidx1.50, align 4, !tbaa !7 + %arrayidx.51 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 51 + %52 = load i32, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %add.51 = add nsw i32 %52, 123 + %arrayidx1.51 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 51 + store i32 %add.51, i32* %arrayidx1.51, align 4, !tbaa !7 + %arrayidx.52 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 52 + %53 = load i32, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %add.52 = add nsw i32 %53, 123 + %arrayidx1.52 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 52 + store i32 %add.52, i32* %arrayidx1.52, align 4, !tbaa !7 + %arrayidx.53 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 53 + %54 = load i32, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %add.53 = add nsw i32 %54, 123 + %arrayidx1.53 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 53 + store i32 %add.53, i32* %arrayidx1.53, align 4, !tbaa !7 + %arrayidx.54 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 54 + %55 = load i32, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %add.54 = add nsw i32 %55, 123 + %arrayidx1.54 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 54 + store i32 %add.54, i32* %arrayidx1.54, align 4, !tbaa !7 + %arrayidx.55 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 55 + %56 = load i32, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %add.55 = add nsw i32 %56, 123 + %arrayidx1.55 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 55 + store i32 %add.55, i32* %arrayidx1.55, align 4, !tbaa !7 + %arrayidx.56 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 56 + %57 = load i32, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %add.56 = add nsw i32 %57, 123 + %arrayidx1.56 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 56 + store i32 %add.56, i32* %arrayidx1.56, align 4, !tbaa !7 + %arrayidx.57 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 57 + %58 = load i32, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %add.57 = add nsw i32 %58, 123 + %arrayidx1.57 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 57 + store i32 %add.57, i32* %arrayidx1.57, align 4, !tbaa !7 + %arrayidx.58 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 58 + %59 = load i32, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %add.58 = add nsw i32 %59, 123 + %arrayidx1.58 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 58 + store i32 %add.58, i32* %arrayidx1.58, align 4, !tbaa !7 + %arrayidx.59 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 59 + %60 = load i32, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %add.59 = add nsw i32 %60, 123 + %arrayidx1.59 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 59 + store i32 %add.59, i32* %arrayidx1.59, align 4, !tbaa !7 + %arrayidx.60 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 60 + %61 = load i32, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %add.60 = add nsw i32 %61, 123 + %arrayidx1.60 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 60 + store i32 %add.60, i32* %arrayidx1.60, align 4, !tbaa !7 + %arrayidx.61 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 61 + %62 = load i32, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %add.61 = add nsw i32 %62, 123 + %arrayidx1.61 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 61 + store i32 %add.61, i32* %arrayidx1.61, align 4, !tbaa !7 + %arrayidx.62 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 62 + %63 = load i32, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %add.62 = add nsw i32 %63, 123 + %arrayidx1.62 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 62 + store i32 %add.62, i32* %arrayidx1.62, align 4, !tbaa !7 + %arrayidx.63 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 63 + %64 = load i32, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %add.63 = add nsw i32 %64, 123 + %arrayidx1.63 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 63 + store i32 %add.63, i32* %arrayidx1.63, align 4, !tbaa !7 + %arrayidx.64 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 64 + %65 = load i32, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %add.64 = add nsw i32 %65, 123 + %arrayidx1.64 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 64 + store i32 %add.64, i32* %arrayidx1.64, align 4, !tbaa !7 + %arrayidx.65 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 65 + %66 = load i32, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %add.65 = add nsw i32 %66, 123 + %arrayidx1.65 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 65 + store i32 %add.65, i32* %arrayidx1.65, align 4, !tbaa !7 + %arrayidx.66 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 66 + %67 = load i32, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %add.66 = add nsw i32 %67, 123 + %arrayidx1.66 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 66 + store i32 %add.66, i32* %arrayidx1.66, align 4, !tbaa !7 + %arrayidx.67 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 67 + %68 = load i32, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %add.67 = add nsw i32 %68, 123 + %arrayidx1.67 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 67 + store i32 %add.67, i32* %arrayidx1.67, align 4, !tbaa !7 + %arrayidx.68 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 68 + %69 = load i32, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %add.68 = add nsw i32 %69, 123 + %arrayidx1.68 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 68 + store i32 %add.68, i32* %arrayidx1.68, align 4, !tbaa !7 + %arrayidx.69 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 69 + %70 = load i32, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %add.69 = add nsw i32 %70, 123 + %arrayidx1.69 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 69 + store i32 %add.69, i32* %arrayidx1.69, align 4, !tbaa !7 + %arrayidx.70 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 70 + %71 = load i32, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %add.70 = add nsw i32 %71, 123 + %arrayidx1.70 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 70 + store i32 %add.70, i32* %arrayidx1.70, align 4, !tbaa !7 + %arrayidx.71 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 71 + %72 = load i32, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %add.71 = add nsw i32 %72, 123 + %arrayidx1.71 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 71 + store i32 %add.71, i32* %arrayidx1.71, align 4, !tbaa !7 + %arrayidx.72 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 72 + %73 = load i32, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %add.72 = add nsw i32 %73, 123 + %arrayidx1.72 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 72 + store i32 %add.72, i32* %arrayidx1.72, align 4, !tbaa !7 + %arrayidx.73 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 73 + %74 = load i32, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %add.73 = add nsw i32 %74, 123 + %arrayidx1.73 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 73 + store i32 %add.73, i32* %arrayidx1.73, align 4, !tbaa !7 + %arrayidx.74 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 74 + %75 = load i32, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %add.74 = add nsw i32 %75, 123 + %arrayidx1.74 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 74 + store i32 %add.74, i32* %arrayidx1.74, align 4, !tbaa !7 + %arrayidx.75 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 75 + %76 = load i32, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %add.75 = add nsw i32 %76, 123 + %arrayidx1.75 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 75 + store i32 %add.75, i32* %arrayidx1.75, align 4, !tbaa !7 + %arrayidx.76 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 76 + %77 = load i32, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %add.76 = add nsw i32 %77, 123 + %arrayidx1.76 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 76 + store i32 %add.76, i32* %arrayidx1.76, align 4, !tbaa !7 + %arrayidx.77 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 77 + %78 = load i32, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %add.77 = add nsw i32 %78, 123 + %arrayidx1.77 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 77 + store i32 %add.77, i32* %arrayidx1.77, align 4, !tbaa !7 + %arrayidx.78 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 78 + %79 = load i32, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %add.78 = add nsw i32 %79, 123 + %arrayidx1.78 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 78 + store i32 %add.78, i32* %arrayidx1.78, align 4, !tbaa !7 + %arrayidx.79 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 79 + %80 = load i32, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %add.79 = add nsw i32 %80, 123 + %arrayidx1.79 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 79 + store i32 %add.79, i32* %arrayidx1.79, align 4, !tbaa !7 + %arrayidx.80 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 80 + %81 = load i32, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %add.80 = add nsw i32 %81, 123 + %arrayidx1.80 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 80 + store i32 %add.80, i32* %arrayidx1.80, align 4, !tbaa !7 + %arrayidx.81 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 81 + %82 = load i32, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %add.81 = add nsw i32 %82, 123 + %arrayidx1.81 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 81 + store i32 %add.81, i32* %arrayidx1.81, align 4, !tbaa !7 + %arrayidx.82 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 82 + %83 = load i32, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %add.82 = add nsw i32 %83, 123 + %arrayidx1.82 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 82 + store i32 %add.82, i32* %arrayidx1.82, align 4, !tbaa !7 + %arrayidx.83 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 83 + %84 = load i32, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %add.83 = add nsw i32 %84, 123 + %arrayidx1.83 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 83 + store i32 %add.83, i32* %arrayidx1.83, align 4, !tbaa !7 + %arrayidx.84 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 84 + %85 = load i32, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %add.84 = add nsw i32 %85, 123 + %arrayidx1.84 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 84 + store i32 %add.84, i32* %arrayidx1.84, align 4, !tbaa !7 + %arrayidx.85 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 85 + %86 = load i32, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %add.85 = add nsw i32 %86, 123 + %arrayidx1.85 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 85 + store i32 %add.85, i32* %arrayidx1.85, align 4, !tbaa !7 + %arrayidx.86 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 86 + %87 = load i32, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %add.86 = add nsw i32 %87, 123 + %arrayidx1.86 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 86 + store i32 %add.86, i32* %arrayidx1.86, align 4, !tbaa !7 + %arrayidx.87 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 87 + %88 = load i32, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %add.87 = add nsw i32 %88, 123 + %arrayidx1.87 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 87 + store i32 %add.87, i32* %arrayidx1.87, align 4, !tbaa !7 + %arrayidx.88 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 88 + %89 = load i32, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %add.88 = add nsw i32 %89, 123 + %arrayidx1.88 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 88 + store i32 %add.88, i32* %arrayidx1.88, align 4, !tbaa !7 + %arrayidx.89 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 89 + %90 = load i32, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %add.89 = add nsw i32 %90, 123 + %arrayidx1.89 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 89 + store i32 %add.89, i32* %arrayidx1.89, align 4, !tbaa !7 + %arrayidx.90 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 90 + %91 = load i32, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %add.90 = add nsw i32 %91, 123 + %arrayidx1.90 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 90 + store i32 %add.90, i32* %arrayidx1.90, align 4, !tbaa !7 + %arrayidx.91 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 91 + %92 = load i32, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %add.91 = add nsw i32 %92, 123 + %arrayidx1.91 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 91 + store i32 %add.91, i32* %arrayidx1.91, align 4, !tbaa !7 + %arrayidx.92 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 92 + %93 = load i32, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %add.92 = add nsw i32 %93, 123 + %arrayidx1.92 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 92 + store i32 %add.92, i32* %arrayidx1.92, align 4, !tbaa !7 + %arrayidx.93 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 93 + %94 = load i32, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %add.93 = add nsw i32 %94, 123 + %arrayidx1.93 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 93 + store i32 %add.93, i32* %arrayidx1.93, align 4, !tbaa !7 + %arrayidx.94 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 94 + %95 = load i32, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %add.94 = add nsw i32 %95, 123 + %arrayidx1.94 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 94 + store i32 %add.94, i32* %arrayidx1.94, align 4, !tbaa !7 + %arrayidx.95 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 95 + %96 = load i32, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %add.95 = add nsw i32 %96, 123 + %arrayidx1.95 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 95 + store i32 %add.95, i32* %arrayidx1.95, align 4, !tbaa !7 + %arrayidx.96 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 96 + %97 = load i32, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %add.96 = add nsw i32 %97, 123 + %arrayidx1.96 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 96 + store i32 %add.96, i32* %arrayidx1.96, align 4, !tbaa !7 + %arrayidx.97 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 97 + %98 = load i32, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %add.97 = add nsw i32 %98, 123 + %arrayidx1.97 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 97 + store i32 %add.97, i32* %arrayidx1.97, align 4, !tbaa !7 + %arrayidx.98 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 98 + %99 = load i32, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %add.98 = add nsw i32 %99, 123 + %arrayidx1.98 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 98 + store i32 %add.98, i32* %arrayidx1.98, align 4, !tbaa !7 + %arrayidx.99 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 99 + %100 = load i32, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %add.99 = add nsw i32 %100, 123 + %arrayidx1.99 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 99 + store i32 %add.99, i32* %arrayidx1.99, align 4, !tbaa !7 + %arrayidx.100 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 100 + %101 = load i32, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %add.100 = add nsw i32 %101, 123 + %arrayidx1.100 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 100 + store i32 %add.100, i32* %arrayidx1.100, align 4, !tbaa !7 + %arrayidx.101 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 101 + %102 = load i32, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %add.101 = add nsw i32 %102, 123 + %arrayidx1.101 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 101 + store i32 %add.101, i32* %arrayidx1.101, align 4, !tbaa !7 + %arrayidx.102 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 102 + %103 = load i32, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %add.102 = add nsw i32 %103, 123 + %arrayidx1.102 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 102 + store i32 %add.102, i32* %arrayidx1.102, align 4, !tbaa !7 + %arrayidx.103 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 103 + %104 = load i32, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %add.103 = add nsw i32 %104, 123 + %arrayidx1.103 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 103 + store i32 %add.103, i32* %arrayidx1.103, align 4, !tbaa !7 + %arrayidx.104 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 104 + %105 = load i32, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %add.104 = add nsw i32 %105, 123 + %arrayidx1.104 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 104 + store i32 %add.104, i32* %arrayidx1.104, align 4, !tbaa !7 + %arrayidx.105 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 105 + %106 = load i32, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %add.105 = add nsw i32 %106, 123 + %arrayidx1.105 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 105 + store i32 %add.105, i32* %arrayidx1.105, align 4, !tbaa !7 + %arrayidx.106 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 106 + %107 = load i32, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %add.106 = add nsw i32 %107, 123 + %arrayidx1.106 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 106 + store i32 %add.106, i32* %arrayidx1.106, align 4, !tbaa !7 + %arrayidx.107 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 107 + %108 = load i32, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %add.107 = add nsw i32 %108, 123 + %arrayidx1.107 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 107 + store i32 %add.107, i32* %arrayidx1.107, align 4, !tbaa !7 + %arrayidx.108 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 108 + %109 = load i32, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %add.108 = add nsw i32 %109, 123 + %arrayidx1.108 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 108 + store i32 %add.108, i32* %arrayidx1.108, align 4, !tbaa !7 + %arrayidx.109 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 109 + %110 = load i32, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %add.109 = add nsw i32 %110, 123 + %arrayidx1.109 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 109 + store i32 %add.109, i32* %arrayidx1.109, align 4, !tbaa !7 + %arrayidx.110 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 110 + %111 = load i32, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + %add.110 = add nsw i32 %111, 123 + %arrayidx1.110 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 110 + store i32 %add.110, i32* %arrayidx1.110, align 4, !tbaa !7 + %112 = load i32, i32 addrspace(1)* %A, align 4, !tbaa !7 + %cmp3 = icmp slt i32 %112, 50 + br i1 %cmp3, label %for.body8.preheader, label %for.body18.preheader + +for.body18.preheader: ; preds = %entry + %mul2080 = mul nsw i32 %112, -2 + store i32 %mul2080, i32 addrspace(1)* %A, align 4, !tbaa !7 + br label %for.body18.for.body18_crit_edge + +for.body8.preheader: ; preds = %entry + %mul78 = sub nsw i32 0, %112 + store i32 %mul78, i32 addrspace(1)* %A, align 4, !tbaa !7 + br label %for.body8.for.body8_crit_edge + +for.body8.for.body8_crit_edge: ; preds = %for.body8.for.body8_crit_edge, %for.body8.preheader + %inc1279 = phi i32 [ 1, %for.body8.preheader ], [ %inc12.10, %for.body8.for.body8_crit_edge ] + %.phi.trans.insert74 = sext i32 %inc1279 to i64 + %arrayidx9.phi.trans.insert = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74 + %.pre75 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert, align 4, !tbaa !7 + %113 = sext i32 %inc1279 to i64 + %arrayidx9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %113 + %mul = sub nsw i32 0, %.pre75 + store i32 %mul, i32 addrspace(1)* %arrayidx9, align 4, !tbaa !7 + %inc12 = add nuw nsw i32 %inc1279, 1 + %.phi.trans.insert74.1 = sext i32 %inc12 to i64 + %arrayidx9.phi.trans.insert.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.1 + %.pre75.1 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.1, align 4, !tbaa !7 + %114 = sext i32 %inc12 to i64 + %arrayidx9.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %114 + %mul.1 = sub nsw i32 0, %.pre75.1 + store i32 %mul.1, i32 addrspace(1)* %arrayidx9.1, align 4, !tbaa !7 + %inc12.1 = add nsw i32 %inc1279, 2 + %.phi.trans.insert74.2 = sext i32 %inc12.1 to i64 + %arrayidx9.phi.trans.insert.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.2 + %.pre75.2 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.2, align 4, !tbaa !7 + %115 = sext i32 %inc12.1 to i64 + %arrayidx9.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %115 + %mul.2 = sub nsw i32 0, %.pre75.2 + store i32 %mul.2, i32 addrspace(1)* %arrayidx9.2, align 4, !tbaa !7 + %inc12.2 = add nsw i32 %inc1279, 3 + %.phi.trans.insert74.3 = sext i32 %inc12.2 to i64 + %arrayidx9.phi.trans.insert.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.3 + %.pre75.3 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.3, align 4, !tbaa !7 + %116 = sext i32 %inc12.2 to i64 + %arrayidx9.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %116 + %mul.3 = sub nsw i32 0, %.pre75.3 + store i32 %mul.3, i32 addrspace(1)* %arrayidx9.3, align 4, !tbaa !7 + %inc12.3 = add nsw i32 %inc1279, 4 + %.phi.trans.insert74.4 = sext i32 %inc12.3 to i64 + %arrayidx9.phi.trans.insert.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.4 + %.pre75.4 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.4, align 4, !tbaa !7 + %117 = sext i32 %inc12.3 to i64 + %arrayidx9.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %117 + %mul.4 = sub nsw i32 0, %.pre75.4 + store i32 %mul.4, i32 addrspace(1)* %arrayidx9.4, align 4, !tbaa !7 + %inc12.4 = add nsw i32 %inc1279, 5 + %.phi.trans.insert74.5 = sext i32 %inc12.4 to i64 + %arrayidx9.phi.trans.insert.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.5 + %.pre75.5 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.5, align 4, !tbaa !7 + %118 = sext i32 %inc12.4 to i64 + %arrayidx9.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %118 + %mul.5 = sub nsw i32 0, %.pre75.5 + store i32 %mul.5, i32 addrspace(1)* %arrayidx9.5, align 4, !tbaa !7 + %inc12.5 = add nsw i32 %inc1279, 6 + %.phi.trans.insert74.6 = sext i32 %inc12.5 to i64 + %arrayidx9.phi.trans.insert.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.6 + %.pre75.6 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.6, align 4, !tbaa !7 + %119 = sext i32 %inc12.5 to i64 + %arrayidx9.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %119 + %mul.6 = sub nsw i32 0, %.pre75.6 + store i32 %mul.6, i32 addrspace(1)* %arrayidx9.6, align 4, !tbaa !7 + %inc12.6 = add nsw i32 %inc1279, 7 + %.phi.trans.insert74.7 = sext i32 %inc12.6 to i64 + %arrayidx9.phi.trans.insert.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.7 + %.pre75.7 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.7, align 4, !tbaa !7 + %120 = sext i32 %inc12.6 to i64 + %arrayidx9.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %120 + %mul.7 = sub nsw i32 0, %.pre75.7 + store i32 %mul.7, i32 addrspace(1)* %arrayidx9.7, align 4, !tbaa !7 + %inc12.7 = add nsw i32 %inc1279, 8 + %.phi.trans.insert74.8 = sext i32 %inc12.7 to i64 + %arrayidx9.phi.trans.insert.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.8 + %.pre75.8 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.8, align 4, !tbaa !7 + %121 = sext i32 %inc12.7 to i64 + %arrayidx9.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %121 + %mul.8 = sub nsw i32 0, %.pre75.8 + store i32 %mul.8, i32 addrspace(1)* %arrayidx9.8, align 4, !tbaa !7 + %inc12.8 = add nsw i32 %inc1279, 9 + %.phi.trans.insert74.9 = sext i32 %inc12.8 to i64 + %arrayidx9.phi.trans.insert.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.9 + %.pre75.9 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.9, align 4, !tbaa !7 + %122 = sext i32 %inc12.8 to i64 + %arrayidx9.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %122 + %mul.9 = sub nsw i32 0, %.pre75.9 + store i32 %mul.9, i32 addrspace(1)* %arrayidx9.9, align 4, !tbaa !7 + %inc12.9 = add nsw i32 %inc1279, 10 + %.phi.trans.insert74.10 = sext i32 %inc12.9 to i64 + %arrayidx9.phi.trans.insert.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert74.10 + %.pre75.10 = load i32, i32 addrspace(1)* %arrayidx9.phi.trans.insert.10, align 4, !tbaa !7 + %123 = sext i32 %inc12.9 to i64 + %arrayidx9.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %123 + %mul.10 = sub nsw i32 0, %.pre75.10 + store i32 %mul.10, i32 addrspace(1)* %arrayidx9.10, align 4, !tbaa !7 + %inc12.10 = add nsw i32 %inc1279, 11 + %exitcond71.10 = icmp eq i32 %inc12.10, 111 + br i1 %exitcond71.10, label %if.end.loopexit, label %for.body8.for.body8_crit_edge + +for.body18.for.body18_crit_edge: ; preds = %for.body18.for.body18_crit_edge, %for.body18.preheader + %inc2381 = phi i32 [ 1, %for.body18.preheader ], [ %inc23.10, %for.body18.for.body18_crit_edge ] + %.phi.trans.insert = sext i32 %inc2381 to i64 + %arrayidx19.phi.trans.insert = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert + %.pre = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert, align 4, !tbaa !7 + %124 = sext i32 %inc2381 to i64 + %arrayidx19 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %124 + %mul20 = mul nsw i32 %.pre, -2 + store i32 %mul20, i32 addrspace(1)* %arrayidx19, align 4, !tbaa !7 + %inc23 = add nuw nsw i32 %inc2381, 1 + %.phi.trans.insert.1 = sext i32 %inc23 to i64 + %arrayidx19.phi.trans.insert.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.1 + %.pre.1 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.1, align 4, !tbaa !7 + %125 = sext i32 %inc23 to i64 + %arrayidx19.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %125 + %mul20.1 = mul nsw i32 %.pre.1, -2 + store i32 %mul20.1, i32 addrspace(1)* %arrayidx19.1, align 4, !tbaa !7 + %inc23.1 = add nsw i32 %inc2381, 2 + %.phi.trans.insert.2 = sext i32 %inc23.1 to i64 + %arrayidx19.phi.trans.insert.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.2 + %.pre.2 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.2, align 4, !tbaa !7 + %126 = sext i32 %inc23.1 to i64 + %arrayidx19.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %126 + %mul20.2 = mul nsw i32 %.pre.2, -2 + store i32 %mul20.2, i32 addrspace(1)* %arrayidx19.2, align 4, !tbaa !7 + %inc23.2 = add nsw i32 %inc2381, 3 + %.phi.trans.insert.3 = sext i32 %inc23.2 to i64 + %arrayidx19.phi.trans.insert.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.3 + %.pre.3 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.3, align 4, !tbaa !7 + %127 = sext i32 %inc23.2 to i64 + %arrayidx19.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %127 + %mul20.3 = mul nsw i32 %.pre.3, -2 + store i32 %mul20.3, i32 addrspace(1)* %arrayidx19.3, align 4, !tbaa !7 + %inc23.3 = add nsw i32 %inc2381, 4 + %.phi.trans.insert.4 = sext i32 %inc23.3 to i64 + %arrayidx19.phi.trans.insert.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.4 + %.pre.4 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.4, align 4, !tbaa !7 + %128 = sext i32 %inc23.3 to i64 + %arrayidx19.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %128 + %mul20.4 = mul nsw i32 %.pre.4, -2 + store i32 %mul20.4, i32 addrspace(1)* %arrayidx19.4, align 4, !tbaa !7 + %inc23.4 = add nsw i32 %inc2381, 5 + %.phi.trans.insert.5 = sext i32 %inc23.4 to i64 + %arrayidx19.phi.trans.insert.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.5 + %.pre.5 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.5, align 4, !tbaa !7 + %129 = sext i32 %inc23.4 to i64 + %arrayidx19.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %129 + %mul20.5 = mul nsw i32 %.pre.5, -2 + store i32 %mul20.5, i32 addrspace(1)* %arrayidx19.5, align 4, !tbaa !7 + %inc23.5 = add nsw i32 %inc2381, 6 + %.phi.trans.insert.6 = sext i32 %inc23.5 to i64 + %arrayidx19.phi.trans.insert.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.6 + %.pre.6 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.6, align 4, !tbaa !7 + %130 = sext i32 %inc23.5 to i64 + %arrayidx19.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %130 + %mul20.6 = mul nsw i32 %.pre.6, -2 + store i32 %mul20.6, i32 addrspace(1)* %arrayidx19.6, align 4, !tbaa !7 + %inc23.6 = add nsw i32 %inc2381, 7 + %.phi.trans.insert.7 = sext i32 %inc23.6 to i64 + %arrayidx19.phi.trans.insert.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.7 + %.pre.7 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.7, align 4, !tbaa !7 + %131 = sext i32 %inc23.6 to i64 + %arrayidx19.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %131 + %mul20.7 = mul nsw i32 %.pre.7, -2 + store i32 %mul20.7, i32 addrspace(1)* %arrayidx19.7, align 4, !tbaa !7 + %inc23.7 = add nsw i32 %inc2381, 8 + %.phi.trans.insert.8 = sext i32 %inc23.7 to i64 + %arrayidx19.phi.trans.insert.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.8 + %.pre.8 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.8, align 4, !tbaa !7 + %132 = sext i32 %inc23.7 to i64 + %arrayidx19.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %132 + %mul20.8 = mul nsw i32 %.pre.8, -2 + store i32 %mul20.8, i32 addrspace(1)* %arrayidx19.8, align 4, !tbaa !7 + %inc23.8 = add nsw i32 %inc2381, 9 + %.phi.trans.insert.9 = sext i32 %inc23.8 to i64 + %arrayidx19.phi.trans.insert.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.9 + %.pre.9 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.9, align 4, !tbaa !7 + %133 = sext i32 %inc23.8 to i64 + %arrayidx19.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %133 + %mul20.9 = mul nsw i32 %.pre.9, -2 + store i32 %mul20.9, i32 addrspace(1)* %arrayidx19.9, align 4, !tbaa !7 + %inc23.9 = add nsw i32 %inc2381, 10 + %.phi.trans.insert.10 = sext i32 %inc23.9 to i64 + %arrayidx19.phi.trans.insert.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %.phi.trans.insert.10 + %.pre.10 = load i32, i32 addrspace(1)* %arrayidx19.phi.trans.insert.10, align 4, !tbaa !7 + %134 = sext i32 %inc23.9 to i64 + %arrayidx19.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %134 + %mul20.10 = mul nsw i32 %.pre.10, -2 + store i32 %mul20.10, i32 addrspace(1)* %arrayidx19.10, align 4, !tbaa !7 + %inc23.10 = add nsw i32 %inc2381, 11 + %exitcond72.10 = icmp eq i32 %inc23.10, 111 + br i1 %exitcond72.10, label %if.end.loopexit82, label %for.body18.for.body18_crit_edge + +if.end.loopexit: ; preds = %for.body8.for.body8_crit_edge + br label %if.end + +if.end.loopexit82: ; preds = %for.body18.for.body18_crit_edge + br label %if.end + +if.end: ; preds = %if.end.loopexit82, %if.end.loopexit + %val.0 = phi i32 [ 779, %if.end.loopexit ], [ -775, %if.end.loopexit82 ] + br label %for.body30 + +for.cond.cleanup29: ; preds = %for.body30 + call void @llvm.lifetime.end(i64 888, i8* nonnull %0) #2 + ret void + +for.body30: ; preds = %for.body30, %if.end + %i26.066 = phi i32 [ 0, %if.end ], [ %inc38.2, %for.body30 ] + %arrayidx31 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 %i26.066 + %135 = load i32, i32* %arrayidx31, align 4, !tbaa !7 + %136 = sext i32 %i26.066 to i64 + %arrayidx32 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %136 + %137 = load i32, i32 addrspace(1)* %arrayidx32, align 4, !tbaa !7 + %mul33 = mul nsw i32 %137, %135 + %add35 = add i32 %val.0, %mul33 + %arrayidx36 = getelementptr inbounds i32, i32 addrspace(1)* %B, i64 %136 + store i32 %add35, i32 addrspace(1)* %arrayidx36, align 4, !tbaa !7 + %inc38 = add nuw nsw i32 %i26.066, 1 + %arrayidx31.1 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 %inc38 + %138 = load i32, i32* %arrayidx31.1, align 4, !tbaa !7 + %139 = sext i32 %inc38 to i64 + %arrayidx32.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %139 + %140 = load i32, i32 addrspace(1)* %arrayidx32.1, align 4, !tbaa !7 + %mul33.1 = mul nsw i32 %140, %138 + %add35.1 = add i32 %val.0, %mul33.1 + %arrayidx36.1 = getelementptr inbounds i32, i32 addrspace(1)* %B, i64 %139 + store i32 %add35.1, i32 addrspace(1)* %arrayidx36.1, align 4, !tbaa !7 + %inc38.1 = add nsw i32 %i26.066, 2 + %arrayidx31.2 = getelementptr inbounds [222 x i32], [222 x i32]* %arr, i32 0, i32 %inc38.1 + %141 = load i32, i32* %arrayidx31.2, align 4, !tbaa !7 + %142 = sext i32 %inc38.1 to i64 + %arrayidx32.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 %142 + %143 = load i32, i32 addrspace(1)* %arrayidx32.2, align 4, !tbaa !7 + %mul33.2 = mul nsw i32 %143, %141 + %add35.2 = add i32 %val.0, %mul33.2 + %arrayidx36.2 = getelementptr inbounds i32, i32 addrspace(1)* %B, i64 %142 + store i32 %add35.2, i32 addrspace(1)* %arrayidx36.2, align 4, !tbaa !7 + %inc38.2 = add nsw i32 %i26.066, 3 + %exitcond.2 = icmp eq i32 %inc38.2, 111 + br i1 %exitcond.2, label %for.cond.cleanup29, label %for.body30 +} + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.start(i64, i8* nocapture) #1 + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.end(i64, i8* nocapture) #1 + +attributes #0 = { nounwind "amdgpu-num-sgpr"="16" "amdgpu-num-active-waves-per-eu"="1,10" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="fiji" "target-features"="+16-bit-insts,+s-memrealtime" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { argmemonly nounwind } +attributes #2 = { nounwind } + +!opencl.kernels = !{!0} +!llvm.ident = !{!6} + +!0 = !{void (i32 addrspace(1)*, i32 addrspace(1)*)* @attr_amdgpu_num_sgpr_16, !1, !2, !3, !4, !5} +!1 = !{!"kernel_arg_addr_space", i32 1, i32 1} +!2 = !{!"kernel_arg_access_qual", !"none", !"none"} +!3 = !{!"kernel_arg_type", !"int*", !"int*"} +!4 = !{!"kernel_arg_base_type", !"int*", !"int*"} +!5 = !{!"kernel_arg_type_qual", !"", !""} +!6 = !{!"clang version 3.9.0 (trunk 272917)"} +!7 = !{!8, !8, i64 0} +!8 = !{!"int", !9, i64 0} +!9 = !{!"omnipotent char", !10, i64 0} +!10 = !{!"Simple C/C++ TBAA"} Index: test/CodeGen/AMDGPU/attr-amdgpu-num-vgpr-invalid.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-num-vgpr-invalid.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-num-vgpr-invalid.ll @@ -0,0 +1,17 @@ +; RUN: not llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s 2>&1 | FileCheck %s + +; For fiji, 8 active waves per execution unit -> [29, 32] VGPRs can be used. + +; CHECK: invalid amdgpu-num-vgpr: requested number of VGPRs cannot be achieved with default or requested maximum number of active waves per execution unit +define void @invalid_0() #0 { +entry: + ret void +} +attributes #0 = {"amdgpu-num-vgpr"="28" "amdgpu-num-active-waves-per-eu"="8,8"} + +; CHECK: invalid amdgpu-num-vgpr: requested number of VGPRs cannot be achieved with default or requested minimum number of active waves per execution unit +define void @invalid_1() #1 { +entry: + ret void +} +attributes #1 = {"amdgpu-num-vgpr"="33" "amdgpu-num-active-waves-per-eu"="8,8"} Index: test/CodeGen/AMDGPU/attr-amdgpu-num-vgpr.ll =================================================================== --- test/CodeGen/AMDGPU/attr-amdgpu-num-vgpr.ll +++ test/CodeGen/AMDGPU/attr-amdgpu-num-vgpr.ll @@ -0,0 +1,817 @@ +; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck %s + +; ModuleID = 'attr-amdgpu-num-vgpr.cl' +source_filename = "attr-amdgpu-num-vgpr.cl" +target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64" +target triple = "amdgcn--amdhsa" + +; CHECK: NumVgprs: 16 +define void @attr_amdgpu_num_vgpr_16(i32 addrspace(1)* nocapture %A) local_unnamed_addr #0 { +entry: + %arr = alloca [111 x i32], align 4 + %0 = bitcast [111 x i32]* %arr to i8* + call void @llvm.lifetime.start(i64 444, i8* %0) #2 + %1 = load i32, i32 addrspace(1)* %A, align 4, !tbaa !7 + %arrayidx1 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 0 + store i32 %1, i32* %arrayidx1, align 4, !tbaa !7 + %arrayidx.1 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 1 + %2 = load i32, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %arrayidx1.1 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 1 + store i32 %2, i32* %arrayidx1.1, align 4, !tbaa !7 + %arrayidx.2 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 2 + %3 = load i32, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %arrayidx1.2 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 2 + store i32 %3, i32* %arrayidx1.2, align 4, !tbaa !7 + %arrayidx.3 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 3 + %4 = load i32, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %arrayidx1.3 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 3 + store i32 %4, i32* %arrayidx1.3, align 4, !tbaa !7 + %arrayidx.4 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 4 + %5 = load i32, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %arrayidx1.4 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 4 + store i32 %5, i32* %arrayidx1.4, align 4, !tbaa !7 + %arrayidx.5 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 5 + %6 = load i32, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %arrayidx1.5 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 5 + store i32 %6, i32* %arrayidx1.5, align 4, !tbaa !7 + %arrayidx.6 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 6 + %7 = load i32, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %arrayidx1.6 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 6 + store i32 %7, i32* %arrayidx1.6, align 4, !tbaa !7 + %arrayidx.7 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 7 + %8 = load i32, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %arrayidx1.7 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 7 + store i32 %8, i32* %arrayidx1.7, align 4, !tbaa !7 + %arrayidx.8 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 8 + %9 = load i32, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %arrayidx1.8 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 8 + store i32 %9, i32* %arrayidx1.8, align 4, !tbaa !7 + %arrayidx.9 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 9 + %10 = load i32, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %arrayidx1.9 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 9 + store i32 %10, i32* %arrayidx1.9, align 4, !tbaa !7 + %arrayidx.10 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 10 + %11 = load i32, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %arrayidx1.10 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 10 + store i32 %11, i32* %arrayidx1.10, align 4, !tbaa !7 + %arrayidx.11 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 11 + %12 = load i32, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %arrayidx1.11 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 11 + store i32 %12, i32* %arrayidx1.11, align 4, !tbaa !7 + %arrayidx.12 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 12 + %13 = load i32, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %arrayidx1.12 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 12 + store i32 %13, i32* %arrayidx1.12, align 4, !tbaa !7 + %arrayidx.13 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 13 + %14 = load i32, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %arrayidx1.13 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 13 + store i32 %14, i32* %arrayidx1.13, align 4, !tbaa !7 + %arrayidx.14 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 14 + %15 = load i32, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %arrayidx1.14 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 14 + store i32 %15, i32* %arrayidx1.14, align 4, !tbaa !7 + %arrayidx.15 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 15 + %16 = load i32, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %arrayidx1.15 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 15 + store i32 %16, i32* %arrayidx1.15, align 4, !tbaa !7 + %arrayidx.16 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 16 + %17 = load i32, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %arrayidx1.16 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 16 + store i32 %17, i32* %arrayidx1.16, align 4, !tbaa !7 + %arrayidx.17 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 17 + %18 = load i32, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %arrayidx1.17 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 17 + store i32 %18, i32* %arrayidx1.17, align 4, !tbaa !7 + %arrayidx.18 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 18 + %19 = load i32, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %arrayidx1.18 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 18 + store i32 %19, i32* %arrayidx1.18, align 4, !tbaa !7 + %arrayidx.19 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 19 + %20 = load i32, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %arrayidx1.19 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 19 + store i32 %20, i32* %arrayidx1.19, align 4, !tbaa !7 + %arrayidx.20 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 20 + %21 = load i32, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %arrayidx1.20 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 20 + store i32 %21, i32* %arrayidx1.20, align 4, !tbaa !7 + %arrayidx.21 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 21 + %22 = load i32, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %arrayidx1.21 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 21 + store i32 %22, i32* %arrayidx1.21, align 4, !tbaa !7 + %arrayidx.22 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 22 + %23 = load i32, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %arrayidx1.22 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 22 + store i32 %23, i32* %arrayidx1.22, align 4, !tbaa !7 + %arrayidx.23 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 23 + %24 = load i32, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %arrayidx1.23 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 23 + store i32 %24, i32* %arrayidx1.23, align 4, !tbaa !7 + %arrayidx.24 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 24 + %25 = load i32, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %arrayidx1.24 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 24 + store i32 %25, i32* %arrayidx1.24, align 4, !tbaa !7 + %arrayidx.25 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 25 + %26 = load i32, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %arrayidx1.25 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 25 + store i32 %26, i32* %arrayidx1.25, align 4, !tbaa !7 + %arrayidx.26 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 26 + %27 = load i32, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %arrayidx1.26 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 26 + store i32 %27, i32* %arrayidx1.26, align 4, !tbaa !7 + %arrayidx.27 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 27 + %28 = load i32, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %arrayidx1.27 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 27 + store i32 %28, i32* %arrayidx1.27, align 4, !tbaa !7 + %arrayidx.28 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 28 + %29 = load i32, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %arrayidx1.28 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 28 + store i32 %29, i32* %arrayidx1.28, align 4, !tbaa !7 + %arrayidx.29 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 29 + %30 = load i32, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %arrayidx1.29 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 29 + store i32 %30, i32* %arrayidx1.29, align 4, !tbaa !7 + %arrayidx.30 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 30 + %31 = load i32, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %arrayidx1.30 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 30 + store i32 %31, i32* %arrayidx1.30, align 4, !tbaa !7 + %arrayidx.31 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 31 + %32 = load i32, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %arrayidx1.31 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 31 + store i32 %32, i32* %arrayidx1.31, align 4, !tbaa !7 + %arrayidx.32 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 32 + %33 = load i32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %arrayidx1.32 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 32 + store i32 %33, i32* %arrayidx1.32, align 4, !tbaa !7 + %arrayidx.33 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 33 + %34 = load i32, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %arrayidx1.33 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 33 + store i32 %34, i32* %arrayidx1.33, align 4, !tbaa !7 + %arrayidx.34 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 34 + %35 = load i32, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %arrayidx1.34 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 34 + store i32 %35, i32* %arrayidx1.34, align 4, !tbaa !7 + %arrayidx.35 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 35 + %36 = load i32, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %arrayidx1.35 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 35 + store i32 %36, i32* %arrayidx1.35, align 4, !tbaa !7 + %arrayidx.36 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 36 + %37 = load i32, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %arrayidx1.36 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 36 + store i32 %37, i32* %arrayidx1.36, align 4, !tbaa !7 + %arrayidx.37 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 37 + %38 = load i32, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %arrayidx1.37 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 37 + store i32 %38, i32* %arrayidx1.37, align 4, !tbaa !7 + %arrayidx.38 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 38 + %39 = load i32, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %arrayidx1.38 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 38 + store i32 %39, i32* %arrayidx1.38, align 4, !tbaa !7 + %arrayidx.39 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 39 + %40 = load i32, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %arrayidx1.39 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 39 + store i32 %40, i32* %arrayidx1.39, align 4, !tbaa !7 + %arrayidx.40 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 40 + %41 = load i32, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %arrayidx1.40 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 40 + store i32 %41, i32* %arrayidx1.40, align 4, !tbaa !7 + %arrayidx.41 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 41 + %42 = load i32, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %arrayidx1.41 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 41 + store i32 %42, i32* %arrayidx1.41, align 4, !tbaa !7 + %arrayidx.42 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 42 + %43 = load i32, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %arrayidx1.42 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 42 + store i32 %43, i32* %arrayidx1.42, align 4, !tbaa !7 + %arrayidx.43 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 43 + %44 = load i32, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %arrayidx1.43 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 43 + store i32 %44, i32* %arrayidx1.43, align 4, !tbaa !7 + %arrayidx.44 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 44 + %45 = load i32, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %arrayidx1.44 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 44 + store i32 %45, i32* %arrayidx1.44, align 4, !tbaa !7 + %arrayidx.45 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 45 + %46 = load i32, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %arrayidx1.45 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 45 + store i32 %46, i32* %arrayidx1.45, align 4, !tbaa !7 + %arrayidx.46 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 46 + %47 = load i32, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %arrayidx1.46 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 46 + store i32 %47, i32* %arrayidx1.46, align 4, !tbaa !7 + %arrayidx.47 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 47 + %48 = load i32, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %arrayidx1.47 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 47 + store i32 %48, i32* %arrayidx1.47, align 4, !tbaa !7 + %arrayidx.48 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 48 + %49 = load i32, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %arrayidx1.48 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 48 + store i32 %49, i32* %arrayidx1.48, align 4, !tbaa !7 + %arrayidx.49 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 49 + %50 = load i32, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %arrayidx1.49 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 49 + store i32 %50, i32* %arrayidx1.49, align 4, !tbaa !7 + %arrayidx.50 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 50 + %51 = load i32, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %arrayidx1.50 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 50 + store i32 %51, i32* %arrayidx1.50, align 4, !tbaa !7 + %arrayidx.51 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 51 + %52 = load i32, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %arrayidx1.51 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 51 + store i32 %52, i32* %arrayidx1.51, align 4, !tbaa !7 + %arrayidx.52 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 52 + %53 = load i32, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %arrayidx1.52 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 52 + store i32 %53, i32* %arrayidx1.52, align 4, !tbaa !7 + %arrayidx.53 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 53 + %54 = load i32, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %arrayidx1.53 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 53 + store i32 %54, i32* %arrayidx1.53, align 4, !tbaa !7 + %arrayidx.54 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 54 + %55 = load i32, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %arrayidx1.54 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 54 + store i32 %55, i32* %arrayidx1.54, align 4, !tbaa !7 + %arrayidx.55 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 55 + %56 = load i32, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %arrayidx1.55 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 55 + store i32 %56, i32* %arrayidx1.55, align 4, !tbaa !7 + %arrayidx.56 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 56 + %57 = load i32, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %arrayidx1.56 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 56 + store i32 %57, i32* %arrayidx1.56, align 4, !tbaa !7 + %arrayidx.57 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 57 + %58 = load i32, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %arrayidx1.57 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 57 + store i32 %58, i32* %arrayidx1.57, align 4, !tbaa !7 + %arrayidx.58 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 58 + %59 = load i32, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %arrayidx1.58 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 58 + store i32 %59, i32* %arrayidx1.58, align 4, !tbaa !7 + %arrayidx.59 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 59 + %60 = load i32, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %arrayidx1.59 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 59 + store i32 %60, i32* %arrayidx1.59, align 4, !tbaa !7 + %arrayidx.60 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 60 + %61 = load i32, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %arrayidx1.60 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 60 + store i32 %61, i32* %arrayidx1.60, align 4, !tbaa !7 + %arrayidx.61 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 61 + %62 = load i32, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %arrayidx1.61 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 61 + store i32 %62, i32* %arrayidx1.61, align 4, !tbaa !7 + %arrayidx.62 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 62 + %63 = load i32, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %arrayidx1.62 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 62 + store i32 %63, i32* %arrayidx1.62, align 4, !tbaa !7 + %arrayidx.63 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 63 + %64 = load i32, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %arrayidx1.63 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 63 + store i32 %64, i32* %arrayidx1.63, align 4, !tbaa !7 + %arrayidx.64 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 64 + %65 = load i32, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %arrayidx1.64 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 64 + store i32 %65, i32* %arrayidx1.64, align 4, !tbaa !7 + %arrayidx.65 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 65 + %66 = load i32, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %arrayidx1.65 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 65 + store i32 %66, i32* %arrayidx1.65, align 4, !tbaa !7 + %arrayidx.66 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 66 + %67 = load i32, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %arrayidx1.66 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 66 + store i32 %67, i32* %arrayidx1.66, align 4, !tbaa !7 + %arrayidx.67 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 67 + %68 = load i32, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %arrayidx1.67 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 67 + store i32 %68, i32* %arrayidx1.67, align 4, !tbaa !7 + %arrayidx.68 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 68 + %69 = load i32, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %arrayidx1.68 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 68 + store i32 %69, i32* %arrayidx1.68, align 4, !tbaa !7 + %arrayidx.69 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 69 + %70 = load i32, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %arrayidx1.69 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 69 + store i32 %70, i32* %arrayidx1.69, align 4, !tbaa !7 + %arrayidx.70 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 70 + %71 = load i32, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %arrayidx1.70 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 70 + store i32 %71, i32* %arrayidx1.70, align 4, !tbaa !7 + %arrayidx.71 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 71 + %72 = load i32, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %arrayidx1.71 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 71 + store i32 %72, i32* %arrayidx1.71, align 4, !tbaa !7 + %arrayidx.72 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 72 + %73 = load i32, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %arrayidx1.72 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 72 + store i32 %73, i32* %arrayidx1.72, align 4, !tbaa !7 + %arrayidx.73 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 73 + %74 = load i32, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %arrayidx1.73 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 73 + store i32 %74, i32* %arrayidx1.73, align 4, !tbaa !7 + %arrayidx.74 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 74 + %75 = load i32, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %arrayidx1.74 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 74 + store i32 %75, i32* %arrayidx1.74, align 4, !tbaa !7 + %arrayidx.75 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 75 + %76 = load i32, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %arrayidx1.75 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 75 + store i32 %76, i32* %arrayidx1.75, align 4, !tbaa !7 + %arrayidx.76 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 76 + %77 = load i32, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %arrayidx1.76 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 76 + store i32 %77, i32* %arrayidx1.76, align 4, !tbaa !7 + %arrayidx.77 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 77 + %78 = load i32, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %arrayidx1.77 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 77 + store i32 %78, i32* %arrayidx1.77, align 4, !tbaa !7 + %arrayidx.78 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 78 + %79 = load i32, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %arrayidx1.78 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 78 + store i32 %79, i32* %arrayidx1.78, align 4, !tbaa !7 + %arrayidx.79 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 79 + %80 = load i32, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %arrayidx1.79 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 79 + store i32 %80, i32* %arrayidx1.79, align 4, !tbaa !7 + %arrayidx.80 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 80 + %81 = load i32, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %arrayidx1.80 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 80 + store i32 %81, i32* %arrayidx1.80, align 4, !tbaa !7 + %arrayidx.81 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 81 + %82 = load i32, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %arrayidx1.81 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 81 + store i32 %82, i32* %arrayidx1.81, align 4, !tbaa !7 + %arrayidx.82 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 82 + %83 = load i32, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %arrayidx1.82 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 82 + store i32 %83, i32* %arrayidx1.82, align 4, !tbaa !7 + %arrayidx.83 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 83 + %84 = load i32, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %arrayidx1.83 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 83 + store i32 %84, i32* %arrayidx1.83, align 4, !tbaa !7 + %arrayidx.84 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 84 + %85 = load i32, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %arrayidx1.84 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 84 + store i32 %85, i32* %arrayidx1.84, align 4, !tbaa !7 + %arrayidx.85 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 85 + %86 = load i32, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %arrayidx1.85 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 85 + store i32 %86, i32* %arrayidx1.85, align 4, !tbaa !7 + %arrayidx.86 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 86 + %87 = load i32, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %arrayidx1.86 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 86 + store i32 %87, i32* %arrayidx1.86, align 4, !tbaa !7 + %arrayidx.87 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 87 + %88 = load i32, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %arrayidx1.87 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 87 + store i32 %88, i32* %arrayidx1.87, align 4, !tbaa !7 + %arrayidx.88 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 88 + %89 = load i32, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %arrayidx1.88 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 88 + store i32 %89, i32* %arrayidx1.88, align 4, !tbaa !7 + %arrayidx.89 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 89 + %90 = load i32, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %arrayidx1.89 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 89 + store i32 %90, i32* %arrayidx1.89, align 4, !tbaa !7 + %arrayidx.90 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 90 + %91 = load i32, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %arrayidx1.90 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 90 + store i32 %91, i32* %arrayidx1.90, align 4, !tbaa !7 + %arrayidx.91 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 91 + %92 = load i32, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %arrayidx1.91 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 91 + store i32 %92, i32* %arrayidx1.91, align 4, !tbaa !7 + %arrayidx.92 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 92 + %93 = load i32, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %arrayidx1.92 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 92 + store i32 %93, i32* %arrayidx1.92, align 4, !tbaa !7 + %arrayidx.93 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 93 + %94 = load i32, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %arrayidx1.93 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 93 + store i32 %94, i32* %arrayidx1.93, align 4, !tbaa !7 + %arrayidx.94 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 94 + %95 = load i32, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %arrayidx1.94 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 94 + store i32 %95, i32* %arrayidx1.94, align 4, !tbaa !7 + %arrayidx.95 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 95 + %96 = load i32, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %arrayidx1.95 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 95 + store i32 %96, i32* %arrayidx1.95, align 4, !tbaa !7 + %arrayidx.96 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 96 + %97 = load i32, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %arrayidx1.96 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 96 + store i32 %97, i32* %arrayidx1.96, align 4, !tbaa !7 + %arrayidx.97 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 97 + %98 = load i32, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %arrayidx1.97 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 97 + store i32 %98, i32* %arrayidx1.97, align 4, !tbaa !7 + %arrayidx.98 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 98 + %99 = load i32, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %arrayidx1.98 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 98 + store i32 %99, i32* %arrayidx1.98, align 4, !tbaa !7 + %arrayidx.99 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 99 + %100 = load i32, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %arrayidx1.99 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 99 + store i32 %100, i32* %arrayidx1.99, align 4, !tbaa !7 + %arrayidx.100 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 100 + %101 = load i32, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %arrayidx1.100 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 100 + store i32 %101, i32* %arrayidx1.100, align 4, !tbaa !7 + %arrayidx.101 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 101 + %102 = load i32, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %arrayidx1.101 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 101 + store i32 %102, i32* %arrayidx1.101, align 4, !tbaa !7 + %arrayidx.102 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 102 + %103 = load i32, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %arrayidx1.102 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 102 + store i32 %103, i32* %arrayidx1.102, align 4, !tbaa !7 + %arrayidx.103 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 103 + %104 = load i32, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %arrayidx1.103 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 103 + store i32 %104, i32* %arrayidx1.103, align 4, !tbaa !7 + %arrayidx.104 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 104 + %105 = load i32, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %arrayidx1.104 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 104 + store i32 %105, i32* %arrayidx1.104, align 4, !tbaa !7 + %arrayidx.105 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 105 + %106 = load i32, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %arrayidx1.105 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 105 + store i32 %106, i32* %arrayidx1.105, align 4, !tbaa !7 + %arrayidx.106 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 106 + %107 = load i32, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %arrayidx1.106 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 106 + store i32 %107, i32* %arrayidx1.106, align 4, !tbaa !7 + %arrayidx.107 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 107 + %108 = load i32, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %arrayidx1.107 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 107 + store i32 %108, i32* %arrayidx1.107, align 4, !tbaa !7 + %arrayidx.108 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 108 + %109 = load i32, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %arrayidx1.108 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 108 + store i32 %109, i32* %arrayidx1.108, align 4, !tbaa !7 + %arrayidx.109 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 109 + %110 = load i32, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %arrayidx1.109 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 109 + store i32 %110, i32* %arrayidx1.109, align 4, !tbaa !7 + %arrayidx.110 = getelementptr inbounds i32, i32 addrspace(1)* %A, i64 110 + %111 = load i32, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + %arrayidx1.110 = getelementptr inbounds [111 x i32], [111 x i32]* %arr, i32 0, i32 110 + store i32 %111, i32* %arrayidx1.110, align 4, !tbaa !7 + %112 = load i32, i32* %arrayidx1, align 4, !tbaa !7 + %mul = sub nsw i32 0, %112 + store i32 %mul, i32 addrspace(1)* %A, align 4, !tbaa !7 + %113 = load i32, i32* %arrayidx1.1, align 4, !tbaa !7 + %mul.1 = sub nsw i32 0, %113 + store i32 %mul.1, i32 addrspace(1)* %arrayidx.1, align 4, !tbaa !7 + %114 = load i32, i32* %arrayidx1.2, align 4, !tbaa !7 + %mul.2 = sub nsw i32 0, %114 + store i32 %mul.2, i32 addrspace(1)* %arrayidx.2, align 4, !tbaa !7 + %115 = load i32, i32* %arrayidx1.3, align 4, !tbaa !7 + %mul.3 = sub nsw i32 0, %115 + store i32 %mul.3, i32 addrspace(1)* %arrayidx.3, align 4, !tbaa !7 + %116 = load i32, i32* %arrayidx1.4, align 4, !tbaa !7 + %mul.4 = sub nsw i32 0, %116 + store i32 %mul.4, i32 addrspace(1)* %arrayidx.4, align 4, !tbaa !7 + %117 = load i32, i32* %arrayidx1.5, align 4, !tbaa !7 + %mul.5 = sub nsw i32 0, %117 + store i32 %mul.5, i32 addrspace(1)* %arrayidx.5, align 4, !tbaa !7 + %118 = load i32, i32* %arrayidx1.6, align 4, !tbaa !7 + %mul.6 = sub nsw i32 0, %118 + store i32 %mul.6, i32 addrspace(1)* %arrayidx.6, align 4, !tbaa !7 + %119 = load i32, i32* %arrayidx1.7, align 4, !tbaa !7 + %mul.7 = sub nsw i32 0, %119 + store i32 %mul.7, i32 addrspace(1)* %arrayidx.7, align 4, !tbaa !7 + %120 = load i32, i32* %arrayidx1.8, align 4, !tbaa !7 + %mul.8 = sub nsw i32 0, %120 + store i32 %mul.8, i32 addrspace(1)* %arrayidx.8, align 4, !tbaa !7 + %121 = load i32, i32* %arrayidx1.9, align 4, !tbaa !7 + %mul.9 = sub nsw i32 0, %121 + store i32 %mul.9, i32 addrspace(1)* %arrayidx.9, align 4, !tbaa !7 + %122 = load i32, i32* %arrayidx1.10, align 4, !tbaa !7 + %mul.10 = sub nsw i32 0, %122 + store i32 %mul.10, i32 addrspace(1)* %arrayidx.10, align 4, !tbaa !7 + %123 = load i32, i32* %arrayidx1.11, align 4, !tbaa !7 + %mul.11 = sub nsw i32 0, %123 + store i32 %mul.11, i32 addrspace(1)* %arrayidx.11, align 4, !tbaa !7 + %124 = load i32, i32* %arrayidx1.12, align 4, !tbaa !7 + %mul.12 = sub nsw i32 0, %124 + store i32 %mul.12, i32 addrspace(1)* %arrayidx.12, align 4, !tbaa !7 + %125 = load i32, i32* %arrayidx1.13, align 4, !tbaa !7 + %mul.13 = sub nsw i32 0, %125 + store i32 %mul.13, i32 addrspace(1)* %arrayidx.13, align 4, !tbaa !7 + %126 = load i32, i32* %arrayidx1.14, align 4, !tbaa !7 + %mul.14 = sub nsw i32 0, %126 + store i32 %mul.14, i32 addrspace(1)* %arrayidx.14, align 4, !tbaa !7 + %127 = load i32, i32* %arrayidx1.15, align 4, !tbaa !7 + %mul.15 = sub nsw i32 0, %127 + store i32 %mul.15, i32 addrspace(1)* %arrayidx.15, align 4, !tbaa !7 + %128 = load i32, i32* %arrayidx1.16, align 4, !tbaa !7 + %mul.16 = sub nsw i32 0, %128 + store i32 %mul.16, i32 addrspace(1)* %arrayidx.16, align 4, !tbaa !7 + %129 = load i32, i32* %arrayidx1.17, align 4, !tbaa !7 + %mul.17 = sub nsw i32 0, %129 + store i32 %mul.17, i32 addrspace(1)* %arrayidx.17, align 4, !tbaa !7 + %130 = load i32, i32* %arrayidx1.18, align 4, !tbaa !7 + %mul.18 = sub nsw i32 0, %130 + store i32 %mul.18, i32 addrspace(1)* %arrayidx.18, align 4, !tbaa !7 + %131 = load i32, i32* %arrayidx1.19, align 4, !tbaa !7 + %mul.19 = sub nsw i32 0, %131 + store i32 %mul.19, i32 addrspace(1)* %arrayidx.19, align 4, !tbaa !7 + %132 = load i32, i32* %arrayidx1.20, align 4, !tbaa !7 + %mul.20 = sub nsw i32 0, %132 + store i32 %mul.20, i32 addrspace(1)* %arrayidx.20, align 4, !tbaa !7 + %133 = load i32, i32* %arrayidx1.21, align 4, !tbaa !7 + %mul.21 = sub nsw i32 0, %133 + store i32 %mul.21, i32 addrspace(1)* %arrayidx.21, align 4, !tbaa !7 + %134 = load i32, i32* %arrayidx1.22, align 4, !tbaa !7 + %mul.22 = sub nsw i32 0, %134 + store i32 %mul.22, i32 addrspace(1)* %arrayidx.22, align 4, !tbaa !7 + %135 = load i32, i32* %arrayidx1.23, align 4, !tbaa !7 + %mul.23 = sub nsw i32 0, %135 + store i32 %mul.23, i32 addrspace(1)* %arrayidx.23, align 4, !tbaa !7 + %136 = load i32, i32* %arrayidx1.24, align 4, !tbaa !7 + %mul.24 = sub nsw i32 0, %136 + store i32 %mul.24, i32 addrspace(1)* %arrayidx.24, align 4, !tbaa !7 + %137 = load i32, i32* %arrayidx1.25, align 4, !tbaa !7 + %mul.25 = sub nsw i32 0, %137 + store i32 %mul.25, i32 addrspace(1)* %arrayidx.25, align 4, !tbaa !7 + %138 = load i32, i32* %arrayidx1.26, align 4, !tbaa !7 + %mul.26 = sub nsw i32 0, %138 + store i32 %mul.26, i32 addrspace(1)* %arrayidx.26, align 4, !tbaa !7 + %139 = load i32, i32* %arrayidx1.27, align 4, !tbaa !7 + %mul.27 = sub nsw i32 0, %139 + store i32 %mul.27, i32 addrspace(1)* %arrayidx.27, align 4, !tbaa !7 + %140 = load i32, i32* %arrayidx1.28, align 4, !tbaa !7 + %mul.28 = sub nsw i32 0, %140 + store i32 %mul.28, i32 addrspace(1)* %arrayidx.28, align 4, !tbaa !7 + %141 = load i32, i32* %arrayidx1.29, align 4, !tbaa !7 + %mul.29 = sub nsw i32 0, %141 + store i32 %mul.29, i32 addrspace(1)* %arrayidx.29, align 4, !tbaa !7 + %142 = load i32, i32* %arrayidx1.30, align 4, !tbaa !7 + %mul.30 = sub nsw i32 0, %142 + store i32 %mul.30, i32 addrspace(1)* %arrayidx.30, align 4, !tbaa !7 + %143 = load i32, i32* %arrayidx1.31, align 4, !tbaa !7 + %mul.31 = sub nsw i32 0, %143 + store i32 %mul.31, i32 addrspace(1)* %arrayidx.31, align 4, !tbaa !7 + %144 = load i32, i32* %arrayidx1.32, align 4, !tbaa !7 + %mul.32 = sub nsw i32 0, %144 + store i32 %mul.32, i32 addrspace(1)* %arrayidx.32, align 4, !tbaa !7 + %145 = load i32, i32* %arrayidx1.33, align 4, !tbaa !7 + %mul.33 = sub nsw i32 0, %145 + store i32 %mul.33, i32 addrspace(1)* %arrayidx.33, align 4, !tbaa !7 + %146 = load i32, i32* %arrayidx1.34, align 4, !tbaa !7 + %mul.34 = sub nsw i32 0, %146 + store i32 %mul.34, i32 addrspace(1)* %arrayidx.34, align 4, !tbaa !7 + %147 = load i32, i32* %arrayidx1.35, align 4, !tbaa !7 + %mul.35 = sub nsw i32 0, %147 + store i32 %mul.35, i32 addrspace(1)* %arrayidx.35, align 4, !tbaa !7 + %148 = load i32, i32* %arrayidx1.36, align 4, !tbaa !7 + %mul.36 = sub nsw i32 0, %148 + store i32 %mul.36, i32 addrspace(1)* %arrayidx.36, align 4, !tbaa !7 + %149 = load i32, i32* %arrayidx1.37, align 4, !tbaa !7 + %mul.37 = sub nsw i32 0, %149 + store i32 %mul.37, i32 addrspace(1)* %arrayidx.37, align 4, !tbaa !7 + %150 = load i32, i32* %arrayidx1.38, align 4, !tbaa !7 + %mul.38 = sub nsw i32 0, %150 + store i32 %mul.38, i32 addrspace(1)* %arrayidx.38, align 4, !tbaa !7 + %151 = load i32, i32* %arrayidx1.39, align 4, !tbaa !7 + %mul.39 = sub nsw i32 0, %151 + store i32 %mul.39, i32 addrspace(1)* %arrayidx.39, align 4, !tbaa !7 + %152 = load i32, i32* %arrayidx1.40, align 4, !tbaa !7 + %mul.40 = sub nsw i32 0, %152 + store i32 %mul.40, i32 addrspace(1)* %arrayidx.40, align 4, !tbaa !7 + %153 = load i32, i32* %arrayidx1.41, align 4, !tbaa !7 + %mul.41 = sub nsw i32 0, %153 + store i32 %mul.41, i32 addrspace(1)* %arrayidx.41, align 4, !tbaa !7 + %154 = load i32, i32* %arrayidx1.42, align 4, !tbaa !7 + %mul.42 = sub nsw i32 0, %154 + store i32 %mul.42, i32 addrspace(1)* %arrayidx.42, align 4, !tbaa !7 + %155 = load i32, i32* %arrayidx1.43, align 4, !tbaa !7 + %mul.43 = sub nsw i32 0, %155 + store i32 %mul.43, i32 addrspace(1)* %arrayidx.43, align 4, !tbaa !7 + %156 = load i32, i32* %arrayidx1.44, align 4, !tbaa !7 + %mul.44 = sub nsw i32 0, %156 + store i32 %mul.44, i32 addrspace(1)* %arrayidx.44, align 4, !tbaa !7 + %157 = load i32, i32* %arrayidx1.45, align 4, !tbaa !7 + %mul.45 = sub nsw i32 0, %157 + store i32 %mul.45, i32 addrspace(1)* %arrayidx.45, align 4, !tbaa !7 + %158 = load i32, i32* %arrayidx1.46, align 4, !tbaa !7 + %mul.46 = sub nsw i32 0, %158 + store i32 %mul.46, i32 addrspace(1)* %arrayidx.46, align 4, !tbaa !7 + %159 = load i32, i32* %arrayidx1.47, align 4, !tbaa !7 + %mul.47 = sub nsw i32 0, %159 + store i32 %mul.47, i32 addrspace(1)* %arrayidx.47, align 4, !tbaa !7 + %160 = load i32, i32* %arrayidx1.48, align 4, !tbaa !7 + %mul.48 = sub nsw i32 0, %160 + store i32 %mul.48, i32 addrspace(1)* %arrayidx.48, align 4, !tbaa !7 + %161 = load i32, i32* %arrayidx1.49, align 4, !tbaa !7 + %mul.49 = sub nsw i32 0, %161 + store i32 %mul.49, i32 addrspace(1)* %arrayidx.49, align 4, !tbaa !7 + %162 = load i32, i32* %arrayidx1.50, align 4, !tbaa !7 + %mul.50 = sub nsw i32 0, %162 + store i32 %mul.50, i32 addrspace(1)* %arrayidx.50, align 4, !tbaa !7 + %163 = load i32, i32* %arrayidx1.51, align 4, !tbaa !7 + %mul.51 = sub nsw i32 0, %163 + store i32 %mul.51, i32 addrspace(1)* %arrayidx.51, align 4, !tbaa !7 + %164 = load i32, i32* %arrayidx1.52, align 4, !tbaa !7 + %mul.52 = sub nsw i32 0, %164 + store i32 %mul.52, i32 addrspace(1)* %arrayidx.52, align 4, !tbaa !7 + %165 = load i32, i32* %arrayidx1.53, align 4, !tbaa !7 + %mul.53 = sub nsw i32 0, %165 + store i32 %mul.53, i32 addrspace(1)* %arrayidx.53, align 4, !tbaa !7 + %166 = load i32, i32* %arrayidx1.54, align 4, !tbaa !7 + %mul.54 = sub nsw i32 0, %166 + store i32 %mul.54, i32 addrspace(1)* %arrayidx.54, align 4, !tbaa !7 + %167 = load i32, i32* %arrayidx1.55, align 4, !tbaa !7 + %mul.55 = sub nsw i32 0, %167 + store i32 %mul.55, i32 addrspace(1)* %arrayidx.55, align 4, !tbaa !7 + %168 = load i32, i32* %arrayidx1.56, align 4, !tbaa !7 + %mul.56 = sub nsw i32 0, %168 + store i32 %mul.56, i32 addrspace(1)* %arrayidx.56, align 4, !tbaa !7 + %169 = load i32, i32* %arrayidx1.57, align 4, !tbaa !7 + %mul.57 = sub nsw i32 0, %169 + store i32 %mul.57, i32 addrspace(1)* %arrayidx.57, align 4, !tbaa !7 + %170 = load i32, i32* %arrayidx1.58, align 4, !tbaa !7 + %mul.58 = sub nsw i32 0, %170 + store i32 %mul.58, i32 addrspace(1)* %arrayidx.58, align 4, !tbaa !7 + %171 = load i32, i32* %arrayidx1.59, align 4, !tbaa !7 + %mul.59 = sub nsw i32 0, %171 + store i32 %mul.59, i32 addrspace(1)* %arrayidx.59, align 4, !tbaa !7 + %172 = load i32, i32* %arrayidx1.60, align 4, !tbaa !7 + %mul.60 = sub nsw i32 0, %172 + store i32 %mul.60, i32 addrspace(1)* %arrayidx.60, align 4, !tbaa !7 + %173 = load i32, i32* %arrayidx1.61, align 4, !tbaa !7 + %mul.61 = sub nsw i32 0, %173 + store i32 %mul.61, i32 addrspace(1)* %arrayidx.61, align 4, !tbaa !7 + %174 = load i32, i32* %arrayidx1.62, align 4, !tbaa !7 + %mul.62 = sub nsw i32 0, %174 + store i32 %mul.62, i32 addrspace(1)* %arrayidx.62, align 4, !tbaa !7 + %175 = load i32, i32* %arrayidx1.63, align 4, !tbaa !7 + %mul.63 = sub nsw i32 0, %175 + store i32 %mul.63, i32 addrspace(1)* %arrayidx.63, align 4, !tbaa !7 + %176 = load i32, i32* %arrayidx1.64, align 4, !tbaa !7 + %mul.64 = sub nsw i32 0, %176 + store i32 %mul.64, i32 addrspace(1)* %arrayidx.64, align 4, !tbaa !7 + %177 = load i32, i32* %arrayidx1.65, align 4, !tbaa !7 + %mul.65 = sub nsw i32 0, %177 + store i32 %mul.65, i32 addrspace(1)* %arrayidx.65, align 4, !tbaa !7 + %178 = load i32, i32* %arrayidx1.66, align 4, !tbaa !7 + %mul.66 = sub nsw i32 0, %178 + store i32 %mul.66, i32 addrspace(1)* %arrayidx.66, align 4, !tbaa !7 + %179 = load i32, i32* %arrayidx1.67, align 4, !tbaa !7 + %mul.67 = sub nsw i32 0, %179 + store i32 %mul.67, i32 addrspace(1)* %arrayidx.67, align 4, !tbaa !7 + %180 = load i32, i32* %arrayidx1.68, align 4, !tbaa !7 + %mul.68 = sub nsw i32 0, %180 + store i32 %mul.68, i32 addrspace(1)* %arrayidx.68, align 4, !tbaa !7 + %181 = load i32, i32* %arrayidx1.69, align 4, !tbaa !7 + %mul.69 = sub nsw i32 0, %181 + store i32 %mul.69, i32 addrspace(1)* %arrayidx.69, align 4, !tbaa !7 + %182 = load i32, i32* %arrayidx1.70, align 4, !tbaa !7 + %mul.70 = sub nsw i32 0, %182 + store i32 %mul.70, i32 addrspace(1)* %arrayidx.70, align 4, !tbaa !7 + %183 = load i32, i32* %arrayidx1.71, align 4, !tbaa !7 + %mul.71 = sub nsw i32 0, %183 + store i32 %mul.71, i32 addrspace(1)* %arrayidx.71, align 4, !tbaa !7 + %184 = load i32, i32* %arrayidx1.72, align 4, !tbaa !7 + %mul.72 = sub nsw i32 0, %184 + store i32 %mul.72, i32 addrspace(1)* %arrayidx.72, align 4, !tbaa !7 + %185 = load i32, i32* %arrayidx1.73, align 4, !tbaa !7 + %mul.73 = sub nsw i32 0, %185 + store i32 %mul.73, i32 addrspace(1)* %arrayidx.73, align 4, !tbaa !7 + %186 = load i32, i32* %arrayidx1.74, align 4, !tbaa !7 + %mul.74 = sub nsw i32 0, %186 + store i32 %mul.74, i32 addrspace(1)* %arrayidx.74, align 4, !tbaa !7 + %187 = load i32, i32* %arrayidx1.75, align 4, !tbaa !7 + %mul.75 = sub nsw i32 0, %187 + store i32 %mul.75, i32 addrspace(1)* %arrayidx.75, align 4, !tbaa !7 + %188 = load i32, i32* %arrayidx1.76, align 4, !tbaa !7 + %mul.76 = sub nsw i32 0, %188 + store i32 %mul.76, i32 addrspace(1)* %arrayidx.76, align 4, !tbaa !7 + %189 = load i32, i32* %arrayidx1.77, align 4, !tbaa !7 + %mul.77 = sub nsw i32 0, %189 + store i32 %mul.77, i32 addrspace(1)* %arrayidx.77, align 4, !tbaa !7 + %190 = load i32, i32* %arrayidx1.78, align 4, !tbaa !7 + %mul.78 = sub nsw i32 0, %190 + store i32 %mul.78, i32 addrspace(1)* %arrayidx.78, align 4, !tbaa !7 + %191 = load i32, i32* %arrayidx1.79, align 4, !tbaa !7 + %mul.79 = sub nsw i32 0, %191 + store i32 %mul.79, i32 addrspace(1)* %arrayidx.79, align 4, !tbaa !7 + %192 = load i32, i32* %arrayidx1.80, align 4, !tbaa !7 + %mul.80 = sub nsw i32 0, %192 + store i32 %mul.80, i32 addrspace(1)* %arrayidx.80, align 4, !tbaa !7 + %193 = load i32, i32* %arrayidx1.81, align 4, !tbaa !7 + %mul.81 = sub nsw i32 0, %193 + store i32 %mul.81, i32 addrspace(1)* %arrayidx.81, align 4, !tbaa !7 + %194 = load i32, i32* %arrayidx1.82, align 4, !tbaa !7 + %mul.82 = sub nsw i32 0, %194 + store i32 %mul.82, i32 addrspace(1)* %arrayidx.82, align 4, !tbaa !7 + %195 = load i32, i32* %arrayidx1.83, align 4, !tbaa !7 + %mul.83 = sub nsw i32 0, %195 + store i32 %mul.83, i32 addrspace(1)* %arrayidx.83, align 4, !tbaa !7 + %196 = load i32, i32* %arrayidx1.84, align 4, !tbaa !7 + %mul.84 = sub nsw i32 0, %196 + store i32 %mul.84, i32 addrspace(1)* %arrayidx.84, align 4, !tbaa !7 + %197 = load i32, i32* %arrayidx1.85, align 4, !tbaa !7 + %mul.85 = sub nsw i32 0, %197 + store i32 %mul.85, i32 addrspace(1)* %arrayidx.85, align 4, !tbaa !7 + %198 = load i32, i32* %arrayidx1.86, align 4, !tbaa !7 + %mul.86 = sub nsw i32 0, %198 + store i32 %mul.86, i32 addrspace(1)* %arrayidx.86, align 4, !tbaa !7 + %199 = load i32, i32* %arrayidx1.87, align 4, !tbaa !7 + %mul.87 = sub nsw i32 0, %199 + store i32 %mul.87, i32 addrspace(1)* %arrayidx.87, align 4, !tbaa !7 + %200 = load i32, i32* %arrayidx1.88, align 4, !tbaa !7 + %mul.88 = sub nsw i32 0, %200 + store i32 %mul.88, i32 addrspace(1)* %arrayidx.88, align 4, !tbaa !7 + %201 = load i32, i32* %arrayidx1.89, align 4, !tbaa !7 + %mul.89 = sub nsw i32 0, %201 + store i32 %mul.89, i32 addrspace(1)* %arrayidx.89, align 4, !tbaa !7 + %202 = load i32, i32* %arrayidx1.90, align 4, !tbaa !7 + %mul.90 = sub nsw i32 0, %202 + store i32 %mul.90, i32 addrspace(1)* %arrayidx.90, align 4, !tbaa !7 + %203 = load i32, i32* %arrayidx1.91, align 4, !tbaa !7 + %mul.91 = sub nsw i32 0, %203 + store i32 %mul.91, i32 addrspace(1)* %arrayidx.91, align 4, !tbaa !7 + %204 = load i32, i32* %arrayidx1.92, align 4, !tbaa !7 + %mul.92 = sub nsw i32 0, %204 + store i32 %mul.92, i32 addrspace(1)* %arrayidx.92, align 4, !tbaa !7 + %205 = load i32, i32* %arrayidx1.93, align 4, !tbaa !7 + %mul.93 = sub nsw i32 0, %205 + store i32 %mul.93, i32 addrspace(1)* %arrayidx.93, align 4, !tbaa !7 + %206 = load i32, i32* %arrayidx1.94, align 4, !tbaa !7 + %mul.94 = sub nsw i32 0, %206 + store i32 %mul.94, i32 addrspace(1)* %arrayidx.94, align 4, !tbaa !7 + %207 = load i32, i32* %arrayidx1.95, align 4, !tbaa !7 + %mul.95 = sub nsw i32 0, %207 + store i32 %mul.95, i32 addrspace(1)* %arrayidx.95, align 4, !tbaa !7 + %208 = load i32, i32* %arrayidx1.96, align 4, !tbaa !7 + %mul.96 = sub nsw i32 0, %208 + store i32 %mul.96, i32 addrspace(1)* %arrayidx.96, align 4, !tbaa !7 + %209 = load i32, i32* %arrayidx1.97, align 4, !tbaa !7 + %mul.97 = sub nsw i32 0, %209 + store i32 %mul.97, i32 addrspace(1)* %arrayidx.97, align 4, !tbaa !7 + %210 = load i32, i32* %arrayidx1.98, align 4, !tbaa !7 + %mul.98 = sub nsw i32 0, %210 + store i32 %mul.98, i32 addrspace(1)* %arrayidx.98, align 4, !tbaa !7 + %211 = load i32, i32* %arrayidx1.99, align 4, !tbaa !7 + %mul.99 = sub nsw i32 0, %211 + store i32 %mul.99, i32 addrspace(1)* %arrayidx.99, align 4, !tbaa !7 + %212 = load i32, i32* %arrayidx1.100, align 4, !tbaa !7 + %mul.100 = sub nsw i32 0, %212 + store i32 %mul.100, i32 addrspace(1)* %arrayidx.100, align 4, !tbaa !7 + %213 = load i32, i32* %arrayidx1.101, align 4, !tbaa !7 + %mul.101 = sub nsw i32 0, %213 + store i32 %mul.101, i32 addrspace(1)* %arrayidx.101, align 4, !tbaa !7 + %214 = load i32, i32* %arrayidx1.102, align 4, !tbaa !7 + %mul.102 = sub nsw i32 0, %214 + store i32 %mul.102, i32 addrspace(1)* %arrayidx.102, align 4, !tbaa !7 + %215 = load i32, i32* %arrayidx1.103, align 4, !tbaa !7 + %mul.103 = sub nsw i32 0, %215 + store i32 %mul.103, i32 addrspace(1)* %arrayidx.103, align 4, !tbaa !7 + %216 = load i32, i32* %arrayidx1.104, align 4, !tbaa !7 + %mul.104 = sub nsw i32 0, %216 + store i32 %mul.104, i32 addrspace(1)* %arrayidx.104, align 4, !tbaa !7 + %217 = load i32, i32* %arrayidx1.105, align 4, !tbaa !7 + %mul.105 = sub nsw i32 0, %217 + store i32 %mul.105, i32 addrspace(1)* %arrayidx.105, align 4, !tbaa !7 + %218 = load i32, i32* %arrayidx1.106, align 4, !tbaa !7 + %mul.106 = sub nsw i32 0, %218 + store i32 %mul.106, i32 addrspace(1)* %arrayidx.106, align 4, !tbaa !7 + %219 = load i32, i32* %arrayidx1.107, align 4, !tbaa !7 + %mul.107 = sub nsw i32 0, %219 + store i32 %mul.107, i32 addrspace(1)* %arrayidx.107, align 4, !tbaa !7 + %220 = load i32, i32* %arrayidx1.108, align 4, !tbaa !7 + %mul.108 = sub nsw i32 0, %220 + store i32 %mul.108, i32 addrspace(1)* %arrayidx.108, align 4, !tbaa !7 + %221 = load i32, i32* %arrayidx1.109, align 4, !tbaa !7 + %mul.109 = sub nsw i32 0, %221 + store i32 %mul.109, i32 addrspace(1)* %arrayidx.109, align 4, !tbaa !7 + %222 = load i32, i32* %arrayidx1.110, align 4, !tbaa !7 + %mul.110 = sub nsw i32 0, %222 + store i32 %mul.110, i32 addrspace(1)* %arrayidx.110, align 4, !tbaa !7 + call void @llvm.lifetime.end(i64 444, i8* %0) #2 + ret void +} + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.start(i64, i8* nocapture) #1 + +; Function Attrs: argmemonly nounwind +declare void @llvm.lifetime.end(i64, i8* nocapture) #1 + +attributes #0 = { nounwind "amdgpu-num-vgpr"="16" "amdgpu-num-active-waves-per-eu"="1,10" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="fiji" "target-features"="+16-bit-insts,+s-memrealtime" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { argmemonly nounwind } +attributes #2 = { nounwind } + +!opencl.kernels = !{!0} +!llvm.ident = !{!6} + +!0 = !{void (i32 addrspace(1)*)* @attr_amdgpu_num_vgpr_16, !1, !2, !3, !4, !5} +!1 = !{!"kernel_arg_addr_space", i32 1} +!2 = !{!"kernel_arg_access_qual", !"none"} +!3 = !{!"kernel_arg_type", !"int*"} +!4 = !{!"kernel_arg_base_type", !"int*"} +!5 = !{!"kernel_arg_type_qual", !""} +!6 = !{!"clang version 3.9.0 (trunk 273003)"} +!7 = !{!8, !8, i64 0} +!8 = !{!"int", !9, i64 0} +!9 = !{!"omnipotent char", !10, i64 0} +!10 = !{!"Simple C/C++ TBAA"} Index: test/CodeGen/AMDGPU/indirect-private-64.ll =================================================================== --- test/CodeGen/AMDGPU/indirect-private-64.ll +++ test/CodeGen/AMDGPU/indirect-private-64.ll @@ -121,4 +121,4 @@ } attributes #0 = { convergent nounwind } -attributes #1 = { nounwind "amdgpu-max-waves-per-eu"="2" "amdgpu-max-work-group-size"="64" } +attributes #1 = { nounwind "amdgpu-num-active-waves-per-eu"="2,2" "amdgpu-flat-work-group-size"="64,64" } Index: test/CodeGen/AMDGPU/large-work-group-promote-alloca.ll =================================================================== --- test/CodeGen/AMDGPU/large-work-group-promote-alloca.ll +++ test/CodeGen/AMDGPU/large-work-group-promote-alloca.ll @@ -110,8 +110,8 @@ ret void } -attributes #0 = { nounwind "amdgpu-max-work-group-size"="63" } -attributes #1 = { nounwind "amdgpu-max-waves-per-eu"="3" "amdgpu-max-work-group-size"="256" } -attributes #2 = { nounwind "amdgpu-max-waves-per-eu"="1" "amdgpu-max-work-group-size"="1600" } -attributes #3 = { nounwind "amdgpu-max-waves-per-eu"="0" } -attributes #4 = { nounwind "amdgpu-max-waves-per-eu"="-1" } +attributes #0 = { nounwind "amdgpu-flat-work-group-size"="63,63" } +attributes #1 = { nounwind "amdgpu-num-active-waves-per-eu"="1,3" "amdgpu-flat-work-group-size"="256,256" } +attributes #2 = { nounwind "amdgpu-num-active-waves-per-eu"="1,1" "amdgpu-flat-work-group-size"="1600,1600" } +attributes #3 = { nounwind "amdgpu-num-active-waves-per-eu"="1,10" } +attributes #4 = { nounwind "amdgpu-num-active-waves-per-eu"="1,10" } Index: test/CodeGen/AMDGPU/large-work-group-registers.ll =================================================================== --- test/CodeGen/AMDGPU/large-work-group-registers.ll +++ test/CodeGen/AMDGPU/large-work-group-registers.ll @@ -1,6 +1,6 @@ ; RUN: llc -march=amdgcn -mcpu=tonga -post-RA-scheduler=0 < %s | FileCheck %s -; CHECK: NumVgprs: 64 +; CHECK: NumVgprs: 32 define void @main([9 x <16 x i8>] addrspace(2)* byval, [17 x <16 x i8>] addrspace(2)* byval, [17 x <8 x i32>] addrspace(2)* byval, [16 x <8 x i32>] addrspace(2)* byval, [16 x <4 x i32>] addrspace(2)* byval, <3 x i32> inreg, <3 x i32> inreg, <3 x i32>) #0 { main_body: %8 = getelementptr [16 x <4 x i32>], [16 x <4 x i32>] addrspace(2)* %4, i64 0, i64 8 @@ -33,7 +33,7 @@ declare void @llvm.amdgcn.buffer.store.format.v4f32(<4 x float>, <4 x i32>, i32, i32, i1, i1) #2 -attributes #0 = { "amdgpu-max-work-group-size"="1024" } +attributes #0 = { "amdgpu-flat-work-group-size"="1024,1024" } attributes #1 = { convergent nounwind } attributes #2 = { nounwind } Index: test/CodeGen/AMDGPU/private-memory-r600.ll =================================================================== --- test/CodeGen/AMDGPU/private-memory-r600.ll +++ test/CodeGen/AMDGPU/private-memory-r600.ll @@ -297,4 +297,4 @@ ; OPT: !0 = !{i32 0, i32 2048} -attributes #0 = { nounwind "amdgpu-max-waves-per-eu"="2" } +attributes #0 = { nounwind "amdgpu-num-active-waves-per-eu"="1,2" } Index: test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll =================================================================== --- test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll +++ test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll @@ -61,5 +61,5 @@ ret void } -attributes #0 = { nounwind "amdgpu-max-work-group-size"="64" "amdgpu-max-waves-per-eu"="3" } +attributes #0 = { nounwind "amdgpu-flat-work-group-size"="64,64" "amdgpu-num-active-waves-per-eu"="3,3" } attributes #1 = { nounwind readnone } Index: test/CodeGen/AMDGPU/promote-alloca-no-opts.ll =================================================================== --- test/CodeGen/AMDGPU/promote-alloca-no-opts.ll +++ test/CodeGen/AMDGPU/promote-alloca-no-opts.ll @@ -34,5 +34,5 @@ ret void } -attributes #0 = { nounwind "amdgpu-max-work-group-size"="64" } -attributes #1 = { nounwind optnone noinline "amdgpu-max-work-group-size"="64" } +attributes #0 = { nounwind "amdgpu-flat-work-group-size"="64,64" } +attributes #1 = { nounwind optnone noinline "amdgpu-flat-work-group-size"="64,64" } Index: test/CodeGen/AMDGPU/promote-alloca-padding-size-estimate.ll =================================================================== --- test/CodeGen/AMDGPU/promote-alloca-padding-size-estimate.ll +++ test/CodeGen/AMDGPU/promote-alloca-padding-size-estimate.ll @@ -127,4 +127,4 @@ ret void } -attributes #0 = { nounwind "amdgpu-max-work-group-size"="64" } +attributes #0 = { nounwind "amdgpu-flat-work-group-size"="64,64" "amdgpu-num-active-waves-per-eu"="1,7" } Index: test/CodeGen/AMDGPU/promote-alloca-to-lds-icmp.ll =================================================================== --- test/CodeGen/AMDGPU/promote-alloca-to-lds-icmp.ll +++ test/CodeGen/AMDGPU/promote-alloca-to-lds-icmp.ll @@ -61,4 +61,4 @@ declare i32* @get_unknown_pointer() #0 -attributes #0 = { nounwind "amdgpu-max-waves-per-eu"="1" } +attributes #0 = { nounwind "amdgpu-num-active-waves-per-eu"="1,1" } Index: test/CodeGen/AMDGPU/promote-alloca-to-lds-phi.ll =================================================================== --- test/CodeGen/AMDGPU/promote-alloca-to-lds-phi.ll +++ test/CodeGen/AMDGPU/promote-alloca-to-lds-phi.ll @@ -201,4 +201,4 @@ declare i32* @get_unknown_pointer() #0 -attributes #0 = { nounwind "amdgpu-max-waves-per-eu"="1" } +attributes #0 = { nounwind "amdgpu-num-active-waves-per-eu"="1,1" } Index: test/CodeGen/AMDGPU/promote-alloca-to-lds-select.ll =================================================================== --- test/CodeGen/AMDGPU/promote-alloca-to-lds-select.ll +++ test/CodeGen/AMDGPU/promote-alloca-to-lds-select.ll @@ -129,5 +129,5 @@ ret void } -attributes #0 = { norecurse nounwind "amdgpu-max-waves-per-eu"="1" } -attributes #1 = { norecurse nounwind } \ No newline at end of file +attributes #0 = { norecurse nounwind "amdgpu-num-active-waves-per-eu"="1,1" } +attributes #1 = { norecurse nounwind } Index: test/CodeGen/AMDGPU/vgpr-spill-emergency-stack-slot.ll =================================================================== --- test/CodeGen/AMDGPU/vgpr-spill-emergency-stack-slot.ll +++ test/CodeGen/AMDGPU/vgpr-spill-emergency-stack-slot.ll @@ -12,16 +12,16 @@ ; GCN-LABEL: {{^}}main: -; GCN-DAG: s_mov_b32 s13, s12 -; GCN-DAG: s_mov_b32 s16, SCRATCH_RSRC_DWORD0 -; GCN-DAG: s_mov_b32 s17, SCRATCH_RSRC_DWORD1 -; GCN-DAG: s_mov_b32 s18, -1 -; SI-DAG: s_mov_b32 s19, 0xe8f000 -; VI-DAG: s_mov_b32 s19, 0xe80000 - -; s13 is offset system SGPR -; GCN: buffer_store_dword {{v[0-9]+}}, off, s[16:19], s13 offset:{{[0-9]+}} ; 16-byte Folded Spill -; GCN: buffer_load_dword v{{[0-9]+}}, off, s[16:19], s13 offset:{{[0-9]+}} ; 16-byte Folded Reload +; GCN-DAG: s_mov_b32 [[SCRATCH_OFFSET_SGPR:s[0-9]+]], s12 +; GCN-DAG: s_mov_b32 s12, SCRATCH_RSRC_DWORD0 +; GCN-DAG: s_mov_b32 s13, SCRATCH_RSRC_DWORD1 +; GCN-DAG: s_mov_b32 s14, -1 +; SI-DAG: s_mov_b32 s15, 0xe8f000 +; VI-DAG: s_mov_b32 s15, 0xe80000 + +; [[SCRATCH_OFFSET_SGPR]] is offset system SGPR +; GCN: buffer_store_dword {{v[0-9]+}}, off, s[12:15], [[SCRATCH_OFFSET_SGPR]] offset:{{[0-9]+}} ; 16-byte Folded Spill +; GCN: buffer_load_dword v{{[0-9]+}}, off, s[12:15], [[SCRATCH_OFFSET_SGPR]] offset:{{[0-9]+}} ; 16-byte Folded Reload ; GCN: NumVgprs: 256 ; GCN: ScratchSize: 1024