Index: lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp =================================================================== --- lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -2097,6 +2097,8 @@ CR_LeadsToInteriorNode }; +typedef DenseMap TFCacheMapT; + /// WalkChainUsers - Walk down the users of the specified chained node that is /// part of the pattern we're matching, looking at all of the users we find. /// This determines whether something is an interior node, whether we have a @@ -2109,7 +2111,8 @@ static ChainResult WalkChainUsers(const SDNode *ChainedNode, SmallVectorImpl &ChainedNodesInPattern, - SmallVectorImpl &InteriorChainedNodes) { + SmallVectorImpl &InteriorChainedNodes, + TFCacheMapT &TFCacheMap) { ChainResult Result = CR_Simple; for (SDNode::use_iterator UI = ChainedNode->use_begin(), @@ -2190,7 +2193,16 @@ // as a new TokenFactor. // // To distinguish these two cases, do a recursive walk down the uses. - switch (WalkChainUsers(User, ChainedNodesInPattern, InteriorChainedNodes)) { + + ChainResult UserResult; + if (TFCacheMap.count(User)) + UserResult = TFCacheMap[User]; + else { + UserResult = WalkChainUsers(User, ChainedNodesInPattern, + InteriorChainedNodes, TFCacheMap); + TFCacheMap[User] = UserResult; + } + switch (UserResult) { case CR_Simple: // If the uses of the TokenFactor are just already-selected nodes, ignore // it, it is "below" our pattern. @@ -2231,9 +2243,10 @@ // users of the chain result. This adds any TokenFactor nodes that are caught // in between chained nodes to the chained and interior nodes list. SmallVector InteriorChainedNodes; + TFCacheMapT TFCacheMap; for (unsigned i = 0, e = ChainNodesMatched.size(); i != e; ++i) { if (WalkChainUsers(ChainNodesMatched[i], ChainNodesMatched, - InteriorChainedNodes) == CR_InducesCycle) + InteriorChainedNodes, TFCacheMap) == CR_InducesCycle) return SDValue(); // Would induce a cycle. } Index: test/CodeGen/Generic/token-compile-time.ll =================================================================== --- /dev/null +++ test/CodeGen/Generic/token-compile-time.ll @@ -0,0 +1,517 @@ +; RUN: llc -combiner-alias-analysis %s -o - > /dev/null + +define void @foo(i32* nocapture %a) { +entry: + br label %for.body + +for.body: ; preds = %for.body, %entry + %count = phi i64 [ 3000, %entry ], [ %dec.124, %for.body ] + %addr = phi i32* [ %a, %entry ], [ %gep.124, %for.body ] + %dec = add nsw i64 %count, -8 + %gep = getelementptr inbounds i32, i32* %addr, i64 8 + %cast = bitcast i32* %addr to i8* + call void @llvm.memset.p0i8.i64(i8* %cast, i8 0, i64 32, i32 4, i1 false) + %dec.1 = add nsw i64 %dec, -8 + %gep.1 = getelementptr inbounds i32, i32* %gep, i64 8 + %cast.1 = bitcast i32* %gep to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.1, i8 0, i64 32, i32 4, i1 false) + %dec.2 = add nsw i64 %dec.1, -8 + %gep.2 = getelementptr inbounds i32, i32* %gep.1, i64 8 + %cast.2 = bitcast i32* %gep.1 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.2, i8 0, i64 32, i32 4, i1 false) + %dec.3 = add nsw i64 %dec.2, -8 + %gep.3 = getelementptr inbounds i32, i32* %gep.2, i64 8 + %cast.3 = bitcast i32* %gep.2 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.3, i8 0, i64 32, i32 4, i1 false) + %dec.4 = add nsw i64 %dec.3, -8 + %gep.4 = getelementptr inbounds i32, i32* %gep.3, i64 8 + %cast.4 = bitcast i32* %gep.3 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.4, i8 0, i64 32, i32 4, i1 false) + %dec.5 = add nsw i64 %dec.4, -8 + %gep.5 = getelementptr inbounds i32, i32* %gep.4, i64 8 + %cast.5 = bitcast i32* %gep.4 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.5, i8 0, i64 32, i32 4, i1 false) + %dec.6 = add nsw i64 %dec.5, -8 + %gep.6 = getelementptr inbounds i32, i32* %gep.5, i64 8 + %cast.6 = bitcast i32* %gep.5 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.6, i8 0, i64 32, i32 4, i1 false) + %dec.7 = add nsw i64 %dec.6, -8 + %gep.7 = getelementptr inbounds i32, i32* %gep.6, i64 8 + %cast.7 = bitcast i32* %gep.6 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.7, i8 0, i64 32, i32 4, i1 false) + %dec.8 = add nsw i64 %dec.7, -8 + %gep.8 = getelementptr inbounds i32, i32* %gep.7, i64 8 + %cast.8 = bitcast i32* %gep.7 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.8, i8 0, i64 32, i32 4, i1 false) + %dec.9 = add nsw i64 %dec.8, -8 + %gep.9 = getelementptr inbounds i32, i32* %gep.8, i64 8 + %cast.9 = bitcast i32* %gep.8 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.9, i8 0, i64 32, i32 4, i1 false) + %dec.10 = add nsw i64 %dec.9, -8 + %gep.10 = getelementptr inbounds i32, i32* %gep.9, i64 8 + %cast.10 = bitcast i32* %gep.9 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.10, i8 0, i64 32, i32 4, i1 false) + %dec.11 = add nsw i64 %dec.10, -8 + %gep.11 = getelementptr inbounds i32, i32* %gep.10, i64 8 + %cast.11 = bitcast i32* %gep.10 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.11, i8 0, i64 32, i32 4, i1 false) + %dec.12 = add nsw i64 %dec.11, -8 + %gep.12 = getelementptr inbounds i32, i32* %gep.11, i64 8 + %cast.12 = bitcast i32* %gep.11 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.12, i8 0, i64 32, i32 4, i1 false) + %dec.13 = add nsw i64 %dec.12, -8 + %gep.13 = getelementptr inbounds i32, i32* %gep.12, i64 8 + %cast.13 = bitcast i32* %gep.12 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.13, i8 0, i64 32, i32 4, i1 false) + %dec.14 = add nsw i64 %dec.13, -8 + %gep.14 = getelementptr inbounds i32, i32* %gep.13, i64 8 + %cast.14 = bitcast i32* %gep.13 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.14, i8 0, i64 32, i32 4, i1 false) + %dec.15 = add nsw i64 %dec.14, -8 + %gep.15 = getelementptr inbounds i32, i32* %gep.14, i64 8 + %cast.15 = bitcast i32* %gep.14 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.15, i8 0, i64 32, i32 4, i1 false) + %dec.16 = add nsw i64 %dec.15, -8 + %gep.16 = getelementptr inbounds i32, i32* %gep.15, i64 8 + %cast.16 = bitcast i32* %gep.15 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.16, i8 0, i64 32, i32 4, i1 false) + %dec.17 = add nsw i64 %dec.16, -8 + %gep.17 = getelementptr inbounds i32, i32* %gep.16, i64 8 + %cast.17 = bitcast i32* %gep.16 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.17, i8 0, i64 32, i32 4, i1 false) + %dec.18 = add nsw i64 %dec.17, -8 + %gep.18 = getelementptr inbounds i32, i32* %gep.17, i64 8 + %cast.18 = bitcast i32* %gep.17 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.18, i8 0, i64 32, i32 4, i1 false) + %dec.19 = add nsw i64 %dec.18, -8 + %gep.19 = getelementptr inbounds i32, i32* %gep.18, i64 8 + %cast.19 = bitcast i32* %gep.18 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.19, i8 0, i64 32, i32 4, i1 false) + %dec.20 = add nsw i64 %dec.19, -8 + %gep.20 = getelementptr inbounds i32, i32* %gep.19, i64 8 + %cast.20 = bitcast i32* %gep.19 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.20, i8 0, i64 32, i32 4, i1 false) + %dec.21 = add nsw i64 %dec.20, -8 + %gep.21 = getelementptr inbounds i32, i32* %gep.20, i64 8 + %cast.21 = bitcast i32* %gep.20 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.21, i8 0, i64 32, i32 4, i1 false) + %dec.22 = add nsw i64 %dec.21, -8 + %gep.22 = getelementptr inbounds i32, i32* %gep.21, i64 8 + %cast.22 = bitcast i32* %gep.21 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.22, i8 0, i64 32, i32 4, i1 false) + %dec.23 = add nsw i64 %dec.22, -8 + %gep.23 = getelementptr inbounds i32, i32* %gep.22, i64 8 + %cast.23 = bitcast i32* %gep.22 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.23, i8 0, i64 32, i32 4, i1 false) + %dec.24 = add nsw i64 %dec.23, -8 + %gep.24 = getelementptr inbounds i32, i32* %gep.23, i64 8 + %cast.24 = bitcast i32* %gep.23 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.24, i8 0, i64 32, i32 4, i1 false) + %dec.25 = add nsw i64 %dec.24, -8 + %gep.25 = getelementptr inbounds i32, i32* %gep.24, i64 8 + %cast.25 = bitcast i32* %gep.24 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.25, i8 0, i64 32, i32 4, i1 false) + %dec.26 = add nsw i64 %dec.25, -8 + %gep.26 = getelementptr inbounds i32, i32* %gep.25, i64 8 + %cast.26 = bitcast i32* %gep.25 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.26, i8 0, i64 32, i32 4, i1 false) + %dec.27 = add nsw i64 %dec.26, -8 + %gep.27 = getelementptr inbounds i32, i32* %gep.26, i64 8 + %cast.27 = bitcast i32* %gep.26 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.27, i8 0, i64 32, i32 4, i1 false) + %dec.28 = add nsw i64 %dec.27, -8 + %gep.28 = getelementptr inbounds i32, i32* %gep.27, i64 8 + %cast.28 = bitcast i32* %gep.27 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.28, i8 0, i64 32, i32 4, i1 false) + %dec.29 = add nsw i64 %dec.28, -8 + %gep.29 = getelementptr inbounds i32, i32* %gep.28, i64 8 + %cast.29 = bitcast i32* %gep.28 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.29, i8 0, i64 32, i32 4, i1 false) + %dec.30 = add nsw i64 %dec.29, -8 + %gep.30 = getelementptr inbounds i32, i32* %gep.29, i64 8 + %cast.30 = bitcast i32* %gep.29 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.30, i8 0, i64 32, i32 4, i1 false) + %dec.31 = add nsw i64 %dec.30, -8 + %gep.31 = getelementptr inbounds i32, i32* %gep.30, i64 8 + %cast.31 = bitcast i32* %gep.30 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.31, i8 0, i64 32, i32 4, i1 false) + %dec.32 = add nsw i64 %dec.31, -8 + %gep.32 = getelementptr inbounds i32, i32* %gep.31, i64 8 + %cast.32 = bitcast i32* %gep.31 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.32, i8 0, i64 32, i32 4, i1 false) + %dec.33 = add nsw i64 %dec.32, -8 + %gep.33 = getelementptr inbounds i32, i32* %gep.32, i64 8 + %cast.33 = bitcast i32* %gep.32 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.33, i8 0, i64 32, i32 4, i1 false) + %dec.34 = add nsw i64 %dec.33, -8 + %gep.34 = getelementptr inbounds i32, i32* %gep.33, i64 8 + %cast.34 = bitcast i32* %gep.33 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.34, i8 0, i64 32, i32 4, i1 false) + %dec.35 = add nsw i64 %dec.34, -8 + %gep.35 = getelementptr inbounds i32, i32* %gep.34, i64 8 + %cast.35 = bitcast i32* %gep.34 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.35, i8 0, i64 32, i32 4, i1 false) + %dec.36 = add nsw i64 %dec.35, -8 + %gep.36 = getelementptr inbounds i32, i32* %gep.35, i64 8 + %cast.36 = bitcast i32* %gep.35 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.36, i8 0, i64 32, i32 4, i1 false) + %dec.37 = add nsw i64 %dec.36, -8 + %gep.37 = getelementptr inbounds i32, i32* %gep.36, i64 8 + %cast.37 = bitcast i32* %gep.36 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.37, i8 0, i64 32, i32 4, i1 false) + %dec.38 = add nsw i64 %dec.37, -8 + %gep.38 = getelementptr inbounds i32, i32* %gep.37, i64 8 + %cast.38 = bitcast i32* %gep.37 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.38, i8 0, i64 32, i32 4, i1 false) + %dec.39 = add nsw i64 %dec.38, -8 + %gep.39 = getelementptr inbounds i32, i32* %gep.38, i64 8 + %cast.39 = bitcast i32* %gep.38 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.39, i8 0, i64 32, i32 4, i1 false) + %dec.40 = add nsw i64 %dec.39, -8 + %gep.40 = getelementptr inbounds i32, i32* %gep.39, i64 8 + %cast.40 = bitcast i32* %gep.39 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.40, i8 0, i64 32, i32 4, i1 false) + %dec.41 = add nsw i64 %dec.40, -8 + %gep.41 = getelementptr inbounds i32, i32* %gep.40, i64 8 + %cast.41 = bitcast i32* %gep.40 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.41, i8 0, i64 32, i32 4, i1 false) + %dec.42 = add nsw i64 %dec.41, -8 + %gep.42 = getelementptr inbounds i32, i32* %gep.41, i64 8 + %cast.42 = bitcast i32* %gep.41 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.42, i8 0, i64 32, i32 4, i1 false) + %dec.43 = add nsw i64 %dec.42, -8 + %gep.43 = getelementptr inbounds i32, i32* %gep.42, i64 8 + %cast.43 = bitcast i32* %gep.42 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.43, i8 0, i64 32, i32 4, i1 false) + %dec.44 = add nsw i64 %dec.43, -8 + %gep.44 = getelementptr inbounds i32, i32* %gep.43, i64 8 + %cast.44 = bitcast i32* %gep.43 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.44, i8 0, i64 32, i32 4, i1 false) + %dec.45 = add nsw i64 %dec.44, -8 + %gep.45 = getelementptr inbounds i32, i32* %gep.44, i64 8 + %cast.45 = bitcast i32* %gep.44 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.45, i8 0, i64 32, i32 4, i1 false) + %dec.46 = add nsw i64 %dec.45, -8 + %gep.46 = getelementptr inbounds i32, i32* %gep.45, i64 8 + %cast.46 = bitcast i32* %gep.45 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.46, i8 0, i64 32, i32 4, i1 false) + %dec.47 = add nsw i64 %dec.46, -8 + %gep.47 = getelementptr inbounds i32, i32* %gep.46, i64 8 + %cast.47 = bitcast i32* %gep.46 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.47, i8 0, i64 32, i32 4, i1 false) + %dec.48 = add nsw i64 %dec.47, -8 + %gep.48 = getelementptr inbounds i32, i32* %gep.47, i64 8 + %cast.48 = bitcast i32* %gep.47 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.48, i8 0, i64 32, i32 4, i1 false) + %dec.49 = add nsw i64 %dec.48, -8 + %gep.49 = getelementptr inbounds i32, i32* %gep.48, i64 8 + %cast.49 = bitcast i32* %gep.48 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.49, i8 0, i64 32, i32 4, i1 false) + %dec.50 = add nsw i64 %dec.49, -8 + %gep.50 = getelementptr inbounds i32, i32* %gep.49, i64 8 + %cast.50 = bitcast i32* %gep.49 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.50, i8 0, i64 32, i32 4, i1 false) + %dec.51 = add nsw i64 %dec.50, -8 + %gep.51 = getelementptr inbounds i32, i32* %gep.50, i64 8 + %cast.51 = bitcast i32* %gep.50 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.51, i8 0, i64 32, i32 4, i1 false) + %dec.52 = add nsw i64 %dec.51, -8 + %gep.52 = getelementptr inbounds i32, i32* %gep.51, i64 8 + %cast.52 = bitcast i32* %gep.51 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.52, i8 0, i64 32, i32 4, i1 false) + %dec.53 = add nsw i64 %dec.52, -8 + %gep.53 = getelementptr inbounds i32, i32* %gep.52, i64 8 + %cast.53 = bitcast i32* %gep.52 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.53, i8 0, i64 32, i32 4, i1 false) + %dec.54 = add nsw i64 %dec.53, -8 + %gep.54 = getelementptr inbounds i32, i32* %gep.53, i64 8 + %cast.54 = bitcast i32* %gep.53 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.54, i8 0, i64 32, i32 4, i1 false) + %dec.55 = add nsw i64 %dec.54, -8 + %gep.55 = getelementptr inbounds i32, i32* %gep.54, i64 8 + %cast.55 = bitcast i32* %gep.54 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.55, i8 0, i64 32, i32 4, i1 false) + %dec.56 = add nsw i64 %dec.55, -8 + %gep.56 = getelementptr inbounds i32, i32* %gep.55, i64 8 + %cast.56 = bitcast i32* %gep.55 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.56, i8 0, i64 32, i32 4, i1 false) + %dec.57 = add nsw i64 %dec.56, -8 + %gep.57 = getelementptr inbounds i32, i32* %gep.56, i64 8 + %cast.57 = bitcast i32* %gep.56 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.57, i8 0, i64 32, i32 4, i1 false) + %dec.58 = add nsw i64 %dec.57, -8 + %gep.58 = getelementptr inbounds i32, i32* %gep.57, i64 8 + %cast.58 = bitcast i32* %gep.57 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.58, i8 0, i64 32, i32 4, i1 false) + %dec.59 = add nsw i64 %dec.58, -8 + %gep.59 = getelementptr inbounds i32, i32* %gep.58, i64 8 + %cast.59 = bitcast i32* %gep.58 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.59, i8 0, i64 32, i32 4, i1 false) + %dec.60 = add nsw i64 %dec.59, -8 + %gep.60 = getelementptr inbounds i32, i32* %gep.59, i64 8 + %cast.60 = bitcast i32* %gep.59 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.60, i8 0, i64 32, i32 4, i1 false) + %dec.61 = add nsw i64 %dec.60, -8 + %gep.61 = getelementptr inbounds i32, i32* %gep.60, i64 8 + %cast.61 = bitcast i32* %gep.60 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.61, i8 0, i64 32, i32 4, i1 false) + %dec.62 = add nsw i64 %dec.61, -8 + %gep.62 = getelementptr inbounds i32, i32* %gep.61, i64 8 + %cast.62 = bitcast i32* %gep.61 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.62, i8 0, i64 32, i32 4, i1 false) + %dec.63 = add nsw i64 %dec.62, -8 + %gep.63 = getelementptr inbounds i32, i32* %gep.62, i64 8 + %cast.63 = bitcast i32* %gep.62 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.63, i8 0, i64 32, i32 4, i1 false) + %dec.64 = add nsw i64 %dec.63, -8 + %gep.64 = getelementptr inbounds i32, i32* %gep.63, i64 8 + %cast.64 = bitcast i32* %gep.63 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.64, i8 0, i64 32, i32 4, i1 false) + %dec.65 = add nsw i64 %dec.64, -8 + %gep.65 = getelementptr inbounds i32, i32* %gep.64, i64 8 + %cast.65 = bitcast i32* %gep.64 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.65, i8 0, i64 32, i32 4, i1 false) + %dec.66 = add nsw i64 %dec.65, -8 + %gep.66 = getelementptr inbounds i32, i32* %gep.65, i64 8 + %cast.66 = bitcast i32* %gep.65 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.66, i8 0, i64 32, i32 4, i1 false) + %dec.67 = add nsw i64 %dec.66, -8 + %gep.67 = getelementptr inbounds i32, i32* %gep.66, i64 8 + %cast.67 = bitcast i32* %gep.66 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.67, i8 0, i64 32, i32 4, i1 false) + %dec.68 = add nsw i64 %dec.67, -8 + %gep.68 = getelementptr inbounds i32, i32* %gep.67, i64 8 + %cast.68 = bitcast i32* %gep.67 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.68, i8 0, i64 32, i32 4, i1 false) + %dec.69 = add nsw i64 %dec.68, -8 + %gep.69 = getelementptr inbounds i32, i32* %gep.68, i64 8 + %cast.69 = bitcast i32* %gep.68 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.69, i8 0, i64 32, i32 4, i1 false) + %dec.70 = add nsw i64 %dec.69, -8 + %gep.70 = getelementptr inbounds i32, i32* %gep.69, i64 8 + %cast.70 = bitcast i32* %gep.69 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.70, i8 0, i64 32, i32 4, i1 false) + %dec.71 = add nsw i64 %dec.70, -8 + %gep.71 = getelementptr inbounds i32, i32* %gep.70, i64 8 + %cast.71 = bitcast i32* %gep.70 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.71, i8 0, i64 32, i32 4, i1 false) + %dec.72 = add nsw i64 %dec.71, -8 + %gep.72 = getelementptr inbounds i32, i32* %gep.71, i64 8 + %cast.72 = bitcast i32* %gep.71 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.72, i8 0, i64 32, i32 4, i1 false) + %dec.73 = add nsw i64 %dec.72, -8 + %gep.73 = getelementptr inbounds i32, i32* %gep.72, i64 8 + %cast.73 = bitcast i32* %gep.72 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.73, i8 0, i64 32, i32 4, i1 false) + %dec.74 = add nsw i64 %dec.73, -8 + %gep.74 = getelementptr inbounds i32, i32* %gep.73, i64 8 + %cast.74 = bitcast i32* %gep.73 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.74, i8 0, i64 32, i32 4, i1 false) + %dec.75 = add nsw i64 %dec.74, -8 + %gep.75 = getelementptr inbounds i32, i32* %gep.74, i64 8 + %cast.75 = bitcast i32* %gep.74 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.75, i8 0, i64 32, i32 4, i1 false) + %dec.76 = add nsw i64 %dec.75, -8 + %gep.76 = getelementptr inbounds i32, i32* %gep.75, i64 8 + %cast.76 = bitcast i32* %gep.75 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.76, i8 0, i64 32, i32 4, i1 false) + %dec.77 = add nsw i64 %dec.76, -8 + %gep.77 = getelementptr inbounds i32, i32* %gep.76, i64 8 + %cast.77 = bitcast i32* %gep.76 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.77, i8 0, i64 32, i32 4, i1 false) + %dec.78 = add nsw i64 %dec.77, -8 + %gep.78 = getelementptr inbounds i32, i32* %gep.77, i64 8 + %cast.78 = bitcast i32* %gep.77 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.78, i8 0, i64 32, i32 4, i1 false) + %dec.79 = add nsw i64 %dec.78, -8 + %gep.79 = getelementptr inbounds i32, i32* %gep.78, i64 8 + %cast.79 = bitcast i32* %gep.78 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.79, i8 0, i64 32, i32 4, i1 false) + %dec.80 = add nsw i64 %dec.79, -8 + %gep.80 = getelementptr inbounds i32, i32* %gep.79, i64 8 + %cast.80 = bitcast i32* %gep.79 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.80, i8 0, i64 32, i32 4, i1 false) + %dec.81 = add nsw i64 %dec.80, -8 + %gep.81 = getelementptr inbounds i32, i32* %gep.80, i64 8 + %cast.81 = bitcast i32* %gep.80 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.81, i8 0, i64 32, i32 4, i1 false) + %dec.82 = add nsw i64 %dec.81, -8 + %gep.82 = getelementptr inbounds i32, i32* %gep.81, i64 8 + %cast.82 = bitcast i32* %gep.81 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.82, i8 0, i64 32, i32 4, i1 false) + %dec.83 = add nsw i64 %dec.82, -8 + %gep.83 = getelementptr inbounds i32, i32* %gep.82, i64 8 + %cast.83 = bitcast i32* %gep.82 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.83, i8 0, i64 32, i32 4, i1 false) + %dec.84 = add nsw i64 %dec.83, -8 + %gep.84 = getelementptr inbounds i32, i32* %gep.83, i64 8 + %cast.84 = bitcast i32* %gep.83 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.84, i8 0, i64 32, i32 4, i1 false) + %dec.85 = add nsw i64 %dec.84, -8 + %gep.85 = getelementptr inbounds i32, i32* %gep.84, i64 8 + %cast.85 = bitcast i32* %gep.84 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.85, i8 0, i64 32, i32 4, i1 false) + %dec.86 = add nsw i64 %dec.85, -8 + %gep.86 = getelementptr inbounds i32, i32* %gep.85, i64 8 + %cast.86 = bitcast i32* %gep.85 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.86, i8 0, i64 32, i32 4, i1 false) + %dec.87 = add nsw i64 %dec.86, -8 + %gep.87 = getelementptr inbounds i32, i32* %gep.86, i64 8 + %cast.87 = bitcast i32* %gep.86 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.87, i8 0, i64 32, i32 4, i1 false) + %dec.88 = add nsw i64 %dec.87, -8 + %gep.88 = getelementptr inbounds i32, i32* %gep.87, i64 8 + %cast.88 = bitcast i32* %gep.87 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.88, i8 0, i64 32, i32 4, i1 false) + %dec.89 = add nsw i64 %dec.88, -8 + %gep.89 = getelementptr inbounds i32, i32* %gep.88, i64 8 + %cast.89 = bitcast i32* %gep.88 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.89, i8 0, i64 32, i32 4, i1 false) + %dec.90 = add nsw i64 %dec.89, -8 + %gep.90 = getelementptr inbounds i32, i32* %gep.89, i64 8 + %cast.90 = bitcast i32* %gep.89 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.90, i8 0, i64 32, i32 4, i1 false) + %dec.91 = add nsw i64 %dec.90, -8 + %gep.91 = getelementptr inbounds i32, i32* %gep.90, i64 8 + %cast.91 = bitcast i32* %gep.90 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.91, i8 0, i64 32, i32 4, i1 false) + %dec.92 = add nsw i64 %dec.91, -8 + %gep.92 = getelementptr inbounds i32, i32* %gep.91, i64 8 + %cast.92 = bitcast i32* %gep.91 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.92, i8 0, i64 32, i32 4, i1 false) + %dec.93 = add nsw i64 %dec.92, -8 + %gep.93 = getelementptr inbounds i32, i32* %gep.92, i64 8 + %cast.93 = bitcast i32* %gep.92 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.93, i8 0, i64 32, i32 4, i1 false) + %dec.94 = add nsw i64 %dec.93, -8 + %gep.94 = getelementptr inbounds i32, i32* %gep.93, i64 8 + %cast.94 = bitcast i32* %gep.93 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.94, i8 0, i64 32, i32 4, i1 false) + %dec.95 = add nsw i64 %dec.94, -8 + %gep.95 = getelementptr inbounds i32, i32* %gep.94, i64 8 + %cast.95 = bitcast i32* %gep.94 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.95, i8 0, i64 32, i32 4, i1 false) + %dec.96 = add nsw i64 %dec.95, -8 + %gep.96 = getelementptr inbounds i32, i32* %gep.95, i64 8 + %cast.96 = bitcast i32* %gep.95 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.96, i8 0, i64 32, i32 4, i1 false) + %dec.97 = add nsw i64 %dec.96, -8 + %gep.97 = getelementptr inbounds i32, i32* %gep.96, i64 8 + %cast.97 = bitcast i32* %gep.96 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.97, i8 0, i64 32, i32 4, i1 false) + %dec.98 = add nsw i64 %dec.97, -8 + %gep.98 = getelementptr inbounds i32, i32* %gep.97, i64 8 + %cast.98 = bitcast i32* %gep.97 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.98, i8 0, i64 32, i32 4, i1 false) + %dec.99 = add nsw i64 %dec.98, -8 + %gep.99 = getelementptr inbounds i32, i32* %gep.98, i64 8 + %cast.99 = bitcast i32* %gep.98 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.99, i8 0, i64 32, i32 4, i1 false) + %dec.100 = add nsw i64 %dec.99, -8 + %gep.100 = getelementptr inbounds i32, i32* %gep.99, i64 8 + %cast.100 = bitcast i32* %gep.99 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.100, i8 0, i64 32, i32 4, i1 false) + %dec.101 = add nsw i64 %dec.100, -8 + %gep.101 = getelementptr inbounds i32, i32* %gep.100, i64 8 + %cast.101 = bitcast i32* %gep.100 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.101, i8 0, i64 32, i32 4, i1 false) + %dec.102 = add nsw i64 %dec.101, -8 + %gep.102 = getelementptr inbounds i32, i32* %gep.101, i64 8 + %cast.102 = bitcast i32* %gep.101 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.102, i8 0, i64 32, i32 4, i1 false) + %dec.103 = add nsw i64 %dec.102, -8 + %gep.103 = getelementptr inbounds i32, i32* %gep.102, i64 8 + %cast.103 = bitcast i32* %gep.102 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.103, i8 0, i64 32, i32 4, i1 false) + %dec.104 = add nsw i64 %dec.103, -8 + %gep.104 = getelementptr inbounds i32, i32* %gep.103, i64 8 + %cast.104 = bitcast i32* %gep.103 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.104, i8 0, i64 32, i32 4, i1 false) + %dec.105 = add nsw i64 %dec.104, -8 + %gep.105 = getelementptr inbounds i32, i32* %gep.104, i64 8 + %cast.105 = bitcast i32* %gep.104 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.105, i8 0, i64 32, i32 4, i1 false) + %dec.106 = add nsw i64 %dec.105, -8 + %gep.106 = getelementptr inbounds i32, i32* %gep.105, i64 8 + %cast.106 = bitcast i32* %gep.105 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.106, i8 0, i64 32, i32 4, i1 false) + %dec.107 = add nsw i64 %dec.106, -8 + %gep.107 = getelementptr inbounds i32, i32* %gep.106, i64 8 + %cast.107 = bitcast i32* %gep.106 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.107, i8 0, i64 32, i32 4, i1 false) + %dec.108 = add nsw i64 %dec.107, -8 + %gep.108 = getelementptr inbounds i32, i32* %gep.107, i64 8 + %cast.108 = bitcast i32* %gep.107 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.108, i8 0, i64 32, i32 4, i1 false) + %dec.109 = add nsw i64 %dec.108, -8 + %gep.109 = getelementptr inbounds i32, i32* %gep.108, i64 8 + %cast.109 = bitcast i32* %gep.108 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.109, i8 0, i64 32, i32 4, i1 false) + %dec.110 = add nsw i64 %dec.109, -8 + %gep.110 = getelementptr inbounds i32, i32* %gep.109, i64 8 + %cast.110 = bitcast i32* %gep.109 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.110, i8 0, i64 32, i32 4, i1 false) + %dec.111 = add nsw i64 %dec.110, -8 + %gep.111 = getelementptr inbounds i32, i32* %gep.110, i64 8 + %cast.111 = bitcast i32* %gep.110 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.111, i8 0, i64 32, i32 4, i1 false) + %dec.112 = add nsw i64 %dec.111, -8 + %gep.112 = getelementptr inbounds i32, i32* %gep.111, i64 8 + %cast.112 = bitcast i32* %gep.111 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.112, i8 0, i64 32, i32 4, i1 false) + %dec.113 = add nsw i64 %dec.112, -8 + %gep.113 = getelementptr inbounds i32, i32* %gep.112, i64 8 + %cast.113 = bitcast i32* %gep.112 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.113, i8 0, i64 32, i32 4, i1 false) + %dec.114 = add nsw i64 %dec.113, -8 + %gep.114 = getelementptr inbounds i32, i32* %gep.113, i64 8 + %cast.114 = bitcast i32* %gep.113 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.114, i8 0, i64 32, i32 4, i1 false) + %dec.115 = add nsw i64 %dec.114, -8 + %gep.115 = getelementptr inbounds i32, i32* %gep.114, i64 8 + %cast.115 = bitcast i32* %gep.114 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.115, i8 0, i64 32, i32 4, i1 false) + %dec.116 = add nsw i64 %dec.115, -8 + %gep.116 = getelementptr inbounds i32, i32* %gep.115, i64 8 + %cast.116 = bitcast i32* %gep.115 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.116, i8 0, i64 32, i32 4, i1 false) + %dec.117 = add nsw i64 %dec.116, -8 + %gep.117 = getelementptr inbounds i32, i32* %gep.116, i64 8 + %cast.117 = bitcast i32* %gep.116 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.117, i8 0, i64 32, i32 4, i1 false) + %dec.118 = add nsw i64 %dec.117, -8 + %gep.118 = getelementptr inbounds i32, i32* %gep.117, i64 8 + %cast.118 = bitcast i32* %gep.117 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.118, i8 0, i64 32, i32 4, i1 false) + %dec.119 = add nsw i64 %dec.118, -8 + %gep.119 = getelementptr inbounds i32, i32* %gep.118, i64 8 + %cast.119 = bitcast i32* %gep.118 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.119, i8 0, i64 32, i32 4, i1 false) + %dec.120 = add nsw i64 %dec.119, -8 + %gep.120 = getelementptr inbounds i32, i32* %gep.119, i64 8 + %cast.120 = bitcast i32* %gep.119 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.120, i8 0, i64 32, i32 4, i1 false) + %dec.121 = add nsw i64 %dec.120, -8 + %gep.121 = getelementptr inbounds i32, i32* %gep.120, i64 8 + %cast.121 = bitcast i32* %gep.120 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.121, i8 0, i64 32, i32 4, i1 false) + %dec.122 = add nsw i64 %dec.121, -8 + %gep.122 = getelementptr inbounds i32, i32* %gep.121, i64 8 + %cast.122 = bitcast i32* %gep.121 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.122, i8 0, i64 32, i32 4, i1 false) + %dec.123 = add nsw i64 %dec.122, -8 + %gep.123 = getelementptr inbounds i32, i32* %gep.122, i64 8 + %cast.123 = bitcast i32* %gep.122 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.123, i8 0, i64 32, i32 4, i1 false) + %dec.124 = add nsw i64 %dec.123, -8 + %gep.124 = getelementptr inbounds i32, i32* %gep.123, i64 8 + %cmp.124 = icmp eq i64 %dec.123, 8 + %cast.124 = bitcast i32* %gep.123 to i8* + call void @llvm.memset.p0i8.i64(i8* %cast.124, i8 0, i64 32, i32 4, i1 false) + br i1 %cmp.124, label %exit, label %for.body + +exit: ; preds = %for.body + ret void +} + +declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #1