Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp =================================================================== --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -14233,12 +14233,26 @@ // |-------|-------| // Load Load Store3 // | | - // Store1 Store2 + // Store1 Store2 // // FIXME: We should be able to climb and // descend TokenFactors to find candidates as well. + StoreSDNode *STChain = St; + int64_t STChainOffset = 0; + while (StoreSDNode *Chain = dyn_cast(STChain->getChain())) { + BaseIndexOffset Ptr; + //Check Chain. + int64_t Offset; + if (!CandidateMatch(Chain, Ptr, Offset)) + break; + if (Offset >= STChainOffset + STChain->getMemoryVT().getSizeInBits()/8) + break; + StoreNodes.push_back(MemOpLink(STChain, STChainOffset)); + STChainOffset = Offset; + STChain = Chain; + } - RootNode = St->getChain().getNode(); + RootNode = STChain->getChain().getNode(); if (LoadSDNode *Ldn = dyn_cast(RootNode)) { RootNode = Ldn->getChain().getNode(); Index: llvm/test/CodeGen/ARM/arm-storebytesmerge.ll =================================================================== --- llvm/test/CodeGen/ARM/arm-storebytesmerge.ll +++ llvm/test/CodeGen/ARM/arm-storebytesmerge.ll @@ -22,52 +22,50 @@ ; CHECK-NEXT: str.w r1, [r0, #406] ; CHECK-NEXT: movw r1, #39834 ; CHECK-NEXT: strh.w r1, [r0, #410] -; CHECK-NEXT: movw r1, #40348 -; CHECK-NEXT: movt r1, #40862 -; CHECK-NEXT: str.w r1, [r0, #412] -; CHECK-NEXT: movw r1, #41376 -; CHECK-NEXT: movt r1, #41890 -; CHECK-NEXT: str.w r1, [r0, #416] -; CHECK-NEXT: movw r1, #42404 -; CHECK-NEXT: movt r1, #42918 -; CHECK-NEXT: str.w r1, [r0, #420] -; CHECK-NEXT: movw r1, #43432 -; CHECK-NEXT: movt r1, #43946 -; CHECK-NEXT: str.w r1, [r0, #424] -; CHECK-NEXT: movw r1, #44460 -; CHECK-NEXT: movt r1, #44974 -; CHECK-NEXT: str.w r1, [r0, #428] -; CHECK-NEXT: movw r1, #45488 -; CHECK-NEXT: strh.w r1, [r0, #432] -; CHECK-NEXT: movw r1, #46002 -; CHECK-NEXT: movt r1, #46516 -; CHECK-NEXT: str.w r1, [r0, #434] -; CHECK-NEXT: movw r1, #47030 -; CHECK-NEXT: strh.w r1, [r0, #438] -; CHECK-NEXT: movw r1, #47544 -; CHECK-NEXT: movt r1, #48058 -; CHECK-NEXT: str.w r1, [r0, #440] -; CHECK-NEXT: movw r1, #48572 -; CHECK-NEXT: movt r1, #49086 -; CHECK-NEXT: str.w r1, [r0, #444] -; CHECK-NEXT: movw r1, #49600 -; CHECK-NEXT: strh.w r1, [r0, #448] -; CHECK-NEXT: movs r1, #194 -; CHECK-NEXT: strb.w r1, [r0, #450] -; CHECK-NEXT: movw r1, #50371 -; CHECK-NEXT: movt r1, #50885 -; CHECK-NEXT: str.w r1, [r0, #451] -; CHECK-NEXT: movw r1, #51399 -; CHECK-NEXT: movt r1, #51913 -; CHECK-NEXT: str.w r1, [r0, #455] -; CHECK-NEXT: movw r1, #52427 -; CHECK-NEXT: movt r1, #52941 -; CHECK-NEXT: str.w r1, [r0, #459] -; CHECK-NEXT: movw r1, #53455 -; CHECK-NEXT: movt r1, #53969 -; CHECK-NEXT: str.w r1, [r0, #463] -; CHECK-NEXT: movw r1, #54483 -; CHECK-NEXT: strh.w r1, [r0, #467] +; CHECK-NEXT: movs r1, #156 +; CHECK-NEXT: strb.w r1, [r0, #412] +; CHECK-NEXT: movw r1, #40605 +; CHECK-NEXT: movt r1, #41119 +; CHECK-NEXT: str.w r1, [r0, #413] +; CHECK-NEXT: movw r1, #41633 +; CHECK-NEXT: movt r1, #42147 +; CHECK-NEXT: str.w r1, [r0, #417] +; CHECK-NEXT: movw r1, #42661 +; CHECK-NEXT: movt r1, #43175 +; CHECK-NEXT: str.w r1, [r0, #421] +; CHECK-NEXT: movw r1, #43689 +; CHECK-NEXT: movt r1, #44203 +; CHECK-NEXT: str.w r1, [r0, #425] +; CHECK-NEXT: movw r1, #44717 +; CHECK-NEXT: movt r1, #45231 +; CHECK-NEXT: str.w r1, [r0, #429] +; CHECK-NEXT: movw r1, #45745 +; CHECK-NEXT: movt r1, #46259 +; CHECK-NEXT: str.w r1, [r0, #433] +; CHECK-NEXT: movw r1, #46773 +; CHECK-NEXT: movt r1, #47287 +; CHECK-NEXT: str.w r1, [r0, #437] +; CHECK-NEXT: movw r1, #47801 +; CHECK-NEXT: movt r1, #48315 +; CHECK-NEXT: str.w r1, [r0, #441] +; CHECK-NEXT: movw r1, #48829 +; CHECK-NEXT: movt r1, #49343 +; CHECK-NEXT: str.w r1, [r0, #445] +; CHECK-NEXT: movw r1, #49857 +; CHECK-NEXT: movt r1, #50371 +; CHECK-NEXT: str.w r1, [r0, #449] +; CHECK-NEXT: movw r1, #50885 +; CHECK-NEXT: movt r1, #51399 +; CHECK-NEXT: str.w r1, [r0, #453] +; CHECK-NEXT: movw r1, #52941 +; CHECK-NEXT: movt r1, #53455 +; CHECK-NEXT: str.w r1, [r0, #461] +; CHECK-NEXT: movw r1, #51913 +; CHECK-NEXT: movt r1, #52427 +; CHECK-NEXT: str.w r1, [r0, #457] +; CHECK-NEXT: movw r1, #53969 +; CHECK-NEXT: movt r1, #54483 +; CHECK-NEXT: str.w r1, [r0, #465] ; CHECK-NEXT: movw r1, #54997 ; CHECK-NEXT: movt r1, #55511 ; CHECK-NEXT: str.w r1, [r0, #469] @@ -84,12 +82,11 @@ ; CHECK-NEXT: movt r1, #59623 ; CHECK-NEXT: str.w r1, [r0, #485] ; CHECK-NEXT: movw r1, #60137 -; CHECK-NEXT: strh.w r1, [r0, #489] -; CHECK-NEXT: movw r1, #60651 -; CHECK-NEXT: movt r1, #61165 -; CHECK-NEXT: str.w r1, [r0, #491] -; CHECK-NEXT: movw r1, #61679 -; CHECK-NEXT: strh.w r1, [r0, #495] +; CHECK-NEXT: movt r1, #60651 +; CHECK-NEXT: str.w r1, [r0, #489] +; CHECK-NEXT: movw r1, #61165 +; CHECK-NEXT: movt r1, #61679 +; CHECK-NEXT: str.w r1, [r0, #493] ; CHECK-NEXT: movw r1, #62193 ; CHECK-NEXT: movt r1, #62707 ; CHECK-NEXT: str.w r1, [r0, #497] @@ -97,12 +94,12 @@ ; CHECK-NEXT: movt r1, #63735 ; CHECK-NEXT: str.w r1, [r0, #501] ; CHECK-NEXT: movw r1, #64249 -; CHECK-NEXT: strh.w r1, [r0, #505] -; CHECK-NEXT: movs r1, #251 -; CHECK-NEXT: strb.w r1, [r0, #507] -; CHECK-NEXT: movw r1, #65020 -; CHECK-NEXT: movt r1, #65534 -; CHECK-NEXT: str.w r1, [r0, #508] +; CHECK-NEXT: movt r1, #64763 +; CHECK-NEXT: str.w r1, [r0, #505] +; CHECK-NEXT: movw r1, #65277 +; CHECK-NEXT: strh.w r1, [r0, #509] +; CHECK-NEXT: movs r1, #255 +; CHECK-NEXT: strb.w r1, [r0, #511] ; CHECK-NEXT: bx lr %v190 = getelementptr inbounds i8, i8* %v50, i32 394 store i8 -118, i8* %v190, align 1 Index: llvm/test/CodeGen/X86/stores-merging2.ll =================================================================== --- /dev/null +++ llvm/test/CodeGen/X86/stores-merging2.ll @@ -0,0 +1,325 @@ +; RUN: llc %s -o - | FileCheck %s + +target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" +target triple = "i386-unknown-linux-gnu" + + + +@ptr = global [300 x i32] zeroinitializer, align 4 +@strptr = global [8 x i8] zeroinitializer, align 1 + +; FindBetterChains in SelectionDAG should give up and the 4 1-byte +; stores will remain in a chain. We should still be able to merge them +; into a 32-bit store. + +; CHECK-LABEL: @foo +; CHECK: movl $1684234849, strptr + +define i8 @foo() { + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 00) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 01) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 02) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 03) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 04) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 05) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 06) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 07) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 08) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 09) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 10) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 11) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 12) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 13) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 14) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 15) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 16) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 17) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 18) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 19) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 20) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 21) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 22) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 23) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 24) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 25) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 26) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 27) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 28) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 29) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 30) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 31) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 32) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 33) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 34) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 35) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 36) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 37) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 38) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 39) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 40) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 41) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 42) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 43) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 44) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 45) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 46) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 47) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 48) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 49) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 50) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 51) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 52) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 53) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 54) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 55) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 56) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 57) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 58) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 59) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 60) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 61) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 62) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 63) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 64) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 65) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 66) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 67) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 68) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 69) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 70) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 71) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 72) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 73) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 74) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 75) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 76) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 77) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 78) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 79) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 80) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 81) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 82) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 83) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 84) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 85) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 86) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 87) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 88) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 89) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 90) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 91) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 92) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 93) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 94) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 95) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 96) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 97) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 98) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 99) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 100) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 101) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 102) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 103) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 104) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 105) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 106) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 107) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 108) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 109) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 110) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 111) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 112) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 113) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 114) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 115) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 116) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 117) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 118) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 119) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 120) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 121) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 122) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 123) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 124) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 125) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 126) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 127) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 128) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 129) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 130) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 131) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 132) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 133) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 134) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 135) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 136) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 137) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 138) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 139) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 140) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 141) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 142) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 143) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 144) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 145) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 146) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 147) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 148) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 149) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 150) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 151) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 152) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 153) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 154) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 155) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 156) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 157) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 158) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 159) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 160) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 161) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 162) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 163) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 164) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 165) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 166) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 167) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 168) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 169) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 170) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 171) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 172) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 173) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 174) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 175) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 176) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 177) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 178) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 179) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 180) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 181) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 182) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 183) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 184) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 185) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 186) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 187) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 188) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 189) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 190) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 191) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 192) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 193) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 194) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 195) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 196) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 197) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 198) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 199) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 200) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 201) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 202) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 203) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 204) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 205) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 206) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 207) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 208) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 209) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 210) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 211) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 212) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 213) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 214) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 215) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 216) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 217) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 218) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 219) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 220) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 221) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 222) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 223) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 224) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 225) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 226) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 227) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 228) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 229) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 230) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 231) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 232) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 233) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 234) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 235) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 236) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 237) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 238) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 239) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 240) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 241) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 242) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 243) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 244) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 245) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 246) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 247) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 248) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 249) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 250) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 251) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 252) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 253) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 254) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 255) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 256) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 257) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 258) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 259) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 260) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 261) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 262) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 263) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 264) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 265) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 266) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 267) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 268) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 269) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 270) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 271) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 272) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 273) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 274) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 275) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 276) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 277) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 278) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 279) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 280) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 281) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 282) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 283) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 284) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 285) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 286) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 287) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 288) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 289) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 290) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 291) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 292) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 293) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 294) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 295) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 296) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 297) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 298) + store i32 0, i32* getelementptr inbounds ([300 x i32], [300 x i32]* @ptr, i32 0, i32 299) + %rv = load i8, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @strptr, i32 0, i32 4), align 1 + store i8 97, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @strptr, i32 0, i32 0) + store i8 98, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @strptr, i32 0, i32 1) + store i8 99, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @strptr, i32 0, i32 2) + store i8 100, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @strptr, i32 0, i32 3) + ret i8 %rv +}