[llvm] e976fb1 - [EarlyCSE] Fix crash with expensive checks after D87691

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 23 10:21:50 PDT 2020


Author: Krzysztof Parzyszek
Date: 2020-09-23T12:21:34-05:00
New Revision: e976fb1e54f30403ca31764da69cba3769487e6a

URL: https://github.com/llvm/llvm-project/commit/e976fb1e54f30403ca31764da69cba3769487e6a
DIFF: https://github.com/llvm/llvm-project/commit/e976fb1e54f30403ca31764da69cba3769487e6a.diff

LOG: [EarlyCSE] Fix crash with expensive checks after D87691

D87691 reordered some checks, which turned out to be unsafe. More
specifically, when examining a store instruction, the check against
getOrCreateResult should be done before attempting to call
isSameMemGeneration. Otherwise a crash in MSSA walker can occur.

This patch restores the order of these calls to what it was originally.

Added: 
    llvm/test/Transforms/EarlyCSE/getmatchingvalue-crash.ll

Modified: 
    llvm/lib/Transforms/Scalar/EarlyCSE.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/EarlyCSE.cpp b/llvm/lib/Transforms/Scalar/EarlyCSE.cpp
index 5eb2e12ff3e2..262d636fe01d 100644
--- a/llvm/lib/Transforms/Scalar/EarlyCSE.cpp
+++ b/llvm/lib/Transforms/Scalar/EarlyCSE.cpp
@@ -1125,6 +1125,12 @@ Value *EarlyCSE::getMatchingValue(LoadValue &InVal, ParseMemoryInst &MemInst,
   Instruction *Matching = MemInstMatching ? MemInst.get() : InVal.DefInst;
   Instruction *Other = MemInstMatching ? InVal.DefInst : MemInst.get();
 
+  // For stores check the result values before checking memory generation
+  // (otherwise isSameMemGeneration may crash).
+  Value *Result = MemInst.isStore() ? getOrCreateResult(Matching, Other->getType()) : nullptr;
+  if (MemInst.isStore() && InVal.DefInst != Result)
+    return nullptr;
+
   // Deal with non-target memory intrinsics.
   bool MatchingNTI = isHandledNonTargetIntrinsic(Matching);
   bool OtherNTI = isHandledNonTargetIntrinsic(Other);
@@ -1140,7 +1146,10 @@ Value *EarlyCSE::getMatchingValue(LoadValue &InVal, ParseMemoryInst &MemInst,
       !isSameMemGeneration(InVal.Generation, CurrentGeneration, InVal.DefInst,
                            MemInst.get()))
     return nullptr;
-  return getOrCreateResult(Matching, Other->getType());
+
+  if (!Result)
+    Result = getOrCreateResult(Matching, Other->getType());
+  return Result;
 }
 
 bool EarlyCSE::overridingStores(const ParseMemoryInst &Earlier,

diff  --git a/llvm/test/Transforms/EarlyCSE/getmatchingvalue-crash.ll b/llvm/test/Transforms/EarlyCSE/getmatchingvalue-crash.ll
new file mode 100644
index 000000000000..621c3ba702e1
--- /dev/null
+++ b/llvm/test/Transforms/EarlyCSE/getmatchingvalue-crash.ll
@@ -0,0 +1,773 @@
+; RUN: opt -basic-aa -aa -memoryssa -early-cse-memssa -verify -S < %s | FileCheck %s
+
+; Check that this doesn't crash. The crash only happens with expensive checks,
+; but there doesn't seem to be a REQUIRES for that.
+
+; CHECK: invoke i32 @f10
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+%s.90 = type { %s.91 }
+%s.91 = type { %s.92* }
+%s.92 = type { %s.93, %s.96, %s.83 }
+%s.93 = type { %s.94, %s.95 }
+%s.94 = type { i32 (...)**, i64 }
+%s.95 = type { i32 (...)** }
+%s.96 = type <{ %s.97, %s.0, i8*, i32, [4 x i8] }>
+%s.97 = type { i32 (...)**, %s.98, i8*, i8*, i8*, i8*, i8*, i8* }
+%s.98 = type { %s.99* }
+%s.99 = type opaque
+%s.0 = type { %s.1 }
+%s.1 = type { %s.2 }
+%s.2 = type { %s.3 }
+%s.3 = type { %s.4 }
+%s.4 = type { %s.5 }
+%s.5 = type { i64, i64, i8* }
+%s.83 = type <{ %s.84, %s.82*, i32 }>
+%s.84 = type { i32 (...)**, i32, i64, i64, i32, i32, i8*, i8*, void (i32, %s.84*, i32)**, i32*, i64, i64, i64*, i64, i64, i8**, i64, i64 }
+%s.82 = type { i32 (...)**, %s.83 }
+%s.161 = type { i8, %s.162 }
+%s.162 = type { %s.163 }
+%s.163 = type { %s.164*, %s.166, %s.168 }
+%s.164 = type { %s.165* }
+%s.165 = type <{ %s.164, %s.165*, %s.164*, i8, [7 x i8] }>
+%s.166 = type { %s.167 }
+%s.167 = type { %s.164 }
+%s.168 = type { %s.169 }
+%s.169 = type { i64 }
+%s.10 = type { %s.11 }
+%s.11 = type { %s.0*, %s.0*, %s.12 }
+%s.12 = type { %s.13 }
+%s.13 = type { %s.0* }
+%s.170 = type { %s.171 }
+%s.171 = type { %s.164*, %s.172, %s.173 }
+%s.172 = type { %s.167 }
+%s.173 = type { %s.169 }
+
+ at g0 = external dso_local unnamed_addr constant [1 x i8], align 1
+ at g1 = external dso_local unnamed_addr constant [3 x i8], align 1
+ at g2 = external dso_local unnamed_addr constant [6 x i8], align 1
+ at g3 = external dso_local unnamed_addr constant [28 x i8], align 1
+ at g4 = external dso_local unnamed_addr constant [15 x i8], align 1
+ at g5 = external dso_local unnamed_addr constant [34 x i8], align 1
+ at g6 = external dso_local unnamed_addr constant [25 x i8], align 1
+
+declare dso_local i32 @f0(...)
+
+; Function Attrs: uwtable
+declare dso_local void @f1(%s.90* nocapture) unnamed_addr #0 align 2
+
+declare dso_local void @f2(%s.0*, %s.92*) local_unnamed_addr #1
+
+declare dso_local void @f3(%s.0*, i8*, i32) local_unnamed_addr #1
+
+define dso_local i8* @f4(%s.161* %a0, i8* %a1, i32 %a2, i8* %a3) local_unnamed_addr #1 align 2 personality i8* bitcast (i32 (...)* @f0 to i8*) {
+b0:
+  %v0 = alloca %s.90, align 8
+  br label %b1
+
+b1:                                               ; preds = %b2, %b0
+  br i1 undef, label %b2, label %b3
+
+b2:                                               ; preds = %b1
+  br label %b1
+
+b3:                                               ; preds = %b1
+  br label %b4
+
+b4:                                               ; preds = %b40, %b3
+  br i1 undef, label %b57, label %b5
+
+b5:                                               ; preds = %b4
+  invoke void @f7(%s.0* nonnull sret align 8 undef, i8* nonnull undef)
+          to label %b6 unwind label %b41
+
+b6:                                               ; preds = %b5
+  br i1 undef, label %b7, label %b8
+
+b7:                                               ; preds = %b6
+  br label %b9
+
+b8:                                               ; preds = %b6
+  br label %b9
+
+b9:                                               ; preds = %b8, %b7
+  br i1 undef, label %b10, label %b11
+
+b10:                                              ; preds = %b9
+  br label %b12
+
+b11:                                              ; preds = %b9
+  br label %b12
+
+b12:                                              ; preds = %b11, %b10
+  br label %b13
+
+b13:                                              ; preds = %b22, %b12
+  br i1 undef, label %b14, label %b15
+
+b14:                                              ; preds = %b13
+  br label %b16
+
+b15:                                              ; preds = %b13
+  br label %b16
+
+b16:                                              ; preds = %b15, %b14
+  br i1 undef, label %b17, label %b23
+
+b17:                                              ; preds = %b16
+  br i1 undef, label %b18, label %b24
+
+b18:                                              ; preds = %b17
+  br i1 undef, label %b19, label %b20
+
+b19:                                              ; preds = %b18
+  br label %b21
+
+b20:                                              ; preds = %b18
+  br label %b21
+
+b21:                                              ; preds = %b20, %b19
+  %v1 = invoke nonnull align 8 dereferenceable(24) %s.0* @f8(%s.0* undef, i64 undef, i64 1)
+          to label %b22 unwind label %b42
+
+b22:                                              ; preds = %b21
+  br label %b13
+
+b23:                                              ; preds = %b16
+  br label %b24
+
+b24:                                              ; preds = %b23, %b17
+  br label %b25
+
+b25:                                              ; preds = %b26, %b24
+  br i1 undef, label %b26, label %b27
+
+b26:                                              ; preds = %b25
+  br label %b25
+
+b27:                                              ; preds = %b25
+  br i1 undef, label %b28, label %b32
+
+b28:                                              ; preds = %b27
+  br label %b29
+
+b29:                                              ; preds = %b30, %b28
+  br i1 undef, label %b30, label %b31
+
+b30:                                              ; preds = %b29
+  br label %b29
+
+b31:                                              ; preds = %b29
+  br label %b34
+
+b32:                                              ; preds = %b27
+  invoke void @f9(%s.10* undef, %s.0* nonnull align 8 dereferenceable(24) undef)
+          to label %b33 unwind label %b43
+
+b33:                                              ; preds = %b32
+  br label %b34
+
+b34:                                              ; preds = %b33, %b31
+  br i1 undef, label %b35, label %b36
+
+b35:                                              ; preds = %b34
+  br label %b36
+
+b36:                                              ; preds = %b35, %b34
+  br i1 undef, label %b37, label %b38
+
+b37:                                              ; preds = %b36
+  br label %b38
+
+b38:                                              ; preds = %b37, %b36
+  br i1 undef, label %b40, label %b39
+
+b39:                                              ; preds = %b39, %b38
+  br i1 undef, label %b39, label %b40
+
+b40:                                              ; preds = %b39, %b38
+  br label %b4
+
+b41:                                              ; preds = %b5
+  %v2 = landingpad { i8*, i32 }
+          cleanup
+  br label %b49
+
+b42:                                              ; preds = %b21
+  %v3 = landingpad { i8*, i32 }
+          cleanup
+  br label %b46
+
+b43:                                              ; preds = %b32
+  %v4 = landingpad { i8*, i32 }
+          cleanup
+  br i1 undef, label %b44, label %b45
+
+b44:                                              ; preds = %b43
+  br label %b45
+
+b45:                                              ; preds = %b44, %b43
+  br label %b46
+
+b46:                                              ; preds = %b45, %b42
+  br i1 undef, label %b47, label %b48
+
+b47:                                              ; preds = %b46
+  br label %b48
+
+b48:                                              ; preds = %b47, %b46
+  br label %b49
+
+b49:                                              ; preds = %b48, %b41
+  br i1 undef, label %b56, label %b50
+
+b50:                                              ; preds = %b49
+  br label %b51
+
+b51:                                              ; preds = %b54, %b50
+  br i1 undef, label %b55, label %b52
+
+b52:                                              ; preds = %b51
+  br i1 undef, label %b53, label %b54
+
+b53:                                              ; preds = %b52
+  br label %b54
+
+b54:                                              ; preds = %b53, %b52
+  br label %b51
+
+b55:                                              ; preds = %b51
+  br label %b56
+
+b56:                                              ; preds = %b55, %b49
+  resume { i8*, i32 } undef
+
+b57:                                              ; preds = %b4
+  invoke void @f1(%s.90* nonnull %v0)
+          to label %b58 unwind label %b61
+
+b58:                                              ; preds = %b57
+  br label %b59
+
+b59:                                              ; preds = %b130, %b58
+  br i1 undef, label %b62, label %b60
+
+b60:                                              ; preds = %b59
+  br label %b132
+
+b61:                                              ; preds = %b57
+  %v5 = landingpad { i8*, i32 }
+          cleanup
+  br label %b205
+
+b62:                                              ; preds = %b59
+  %v6 = invoke i64 @f5(%s.170* nonnull undef, %s.0* nonnull align 8 dereferenceable(24) undef)
+          to label %b63 unwind label %b76
+
+b63:                                              ; preds = %b62
+  br i1 undef, label %b77, label %b64
+
+b64:                                              ; preds = %b63
+  %v7 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @g2, i64 0, i64 0), i64 undef)
+          to label %b65 unwind label %b76
+
+b65:                                              ; preds = %b64
+  br label %b66
+
+b66:                                              ; preds = %b65
+  br i1 undef, label %b67, label %b68
+
+b67:                                              ; preds = %b66
+  br label %b69
+
+b68:                                              ; preds = %b66
+  br label %b69
+
+b69:                                              ; preds = %b68, %b67
+  br i1 undef, label %b70, label %b71
+
+b70:                                              ; preds = %b69
+  br label %b72
+
+b71:                                              ; preds = %b69
+  br label %b72
+
+b72:                                              ; preds = %b71, %b70
+  %v8 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* undef, i64 undef)
+          to label %b73 unwind label %b76
+
+b73:                                              ; preds = %b72
+  br label %b74
+
+b74:                                              ; preds = %b73
+  %v9 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @g3, i64 0, i64 0), i64 undef)
+          to label %b75 unwind label %b76
+
+b75:                                              ; preds = %b74
+  br label %b130
+
+b76:                                              ; preds = %b74, %b72, %b64, %b62
+  %v10 = landingpad { i8*, i32 }
+          cleanup
+  br label %b131
+
+b77:                                              ; preds = %b63
+  br label %b78
+
+b78:                                              ; preds = %b111, %b77
+  br label %b79
+
+b79:                                              ; preds = %b78
+  br i1 undef, label %b81, label %b117
+
+b80:                                              ; No predecessors!
+  %v11 = landingpad { i8*, i32 }
+          cleanup
+  br label %b113
+
+b81:                                              ; preds = %b79
+  br label %b82
+
+b82:                                              ; preds = %b81
+  br i1 undef, label %b83, label %b84
+
+b83:                                              ; preds = %b82
+  br label %b85
+
+b84:                                              ; preds = %b82
+  br label %b85
+
+b85:                                              ; preds = %b84, %b83
+  br i1 undef, label %b86, label %b87
+
+b86:                                              ; preds = %b85
+  br label %b88
+
+b87:                                              ; preds = %b85
+  br label %b88
+
+b88:                                              ; preds = %b87, %b86
+  br i1 undef, label %b89, label %b102
+
+b89:                                              ; preds = %b88
+  br i1 undef, label %b90, label %b91
+
+b90:                                              ; preds = %b89
+  br label %b92
+
+b91:                                              ; preds = %b89
+  br label %b92
+
+b92:                                              ; preds = %b91, %b90
+  br i1 undef, label %b93, label %b94
+
+b93:                                              ; preds = %b92
+  br label %b95
+
+b94:                                              ; preds = %b92
+  br label %b95
+
+b95:                                              ; preds = %b94, %b93
+  br i1 undef, label %b96, label %b99
+
+b96:                                              ; preds = %b95
+  br i1 undef, label %b98, label %b97
+
+b97:                                              ; preds = %b96
+  br label %b98
+
+b98:                                              ; preds = %b97, %b96
+  br label %b102
+
+b99:                                              ; preds = %b101, %b95
+  br i1 undef, label %b102, label %b100
+
+b100:                                             ; preds = %b99
+  br i1 undef, label %b101, label %b102
+
+b101:                                             ; preds = %b100
+  br label %b99
+
+b102:                                             ; preds = %b100, %b99, %b98, %b88
+  br i1 undef, label %b112, label %b104
+
+b103:                                             ; No predecessors!
+  %v12 = landingpad { i8*, i32 }
+          cleanup
+  br label %b113
+
+b104:                                             ; preds = %b102
+  br i1 undef, label %b108, label %b105
+
+b105:                                             ; preds = %b104
+  br label %b106
+
+b106:                                             ; preds = %b106, %b105
+  br i1 undef, label %b107, label %b106
+
+b107:                                             ; preds = %b106
+  br label %b111
+
+b108:                                             ; preds = %b109, %b104
+  br i1 undef, label %b110, label %b109
+
+b109:                                             ; preds = %b108
+  br label %b108
+
+b110:                                             ; preds = %b108
+  br label %b111
+
+b111:                                             ; preds = %b110, %b107
+  br label %b78
+
+b112:                                             ; preds = %b102
+  br i1 undef, label %b114, label %b118
+
+b113:                                             ; preds = %b103, %b80
+  br label %b131
+
+b114:                                             ; preds = %b112
+  %v13 = invoke { %s.164*, i8 } @f11(%s.171* undef, %s.0* nonnull align 8 dereferenceable(24) undef, %s.0* nonnull align 8 dereferenceable(24) undef)
+          to label %b115 unwind label %b116
+
+b115:                                             ; preds = %b114
+  br label %b130
+
+b116:                                             ; preds = %b128, %b126, %b118, %b114
+  %v14 = landingpad { i8*, i32 }
+          cleanup
+  br label %b131
+
+b117:                                             ; preds = %b79
+  br label %b118
+
+b118:                                             ; preds = %b117, %b112
+  %v15 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @g4, i64 0, i64 0), i64 undef)
+          to label %b119 unwind label %b116
+
+b119:                                             ; preds = %b118
+  br label %b120
+
+b120:                                             ; preds = %b119
+  br i1 undef, label %b121, label %b122
+
+b121:                                             ; preds = %b120
+  br label %b123
+
+b122:                                             ; preds = %b120
+  br label %b123
+
+b123:                                             ; preds = %b122, %b121
+  br i1 undef, label %b124, label %b125
+
+b124:                                             ; preds = %b123
+  br label %b126
+
+b125:                                             ; preds = %b123
+  br label %b126
+
+b126:                                             ; preds = %b125, %b124
+  %v16 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* undef, i64 undef)
+          to label %b127 unwind label %b116
+
+b127:                                             ; preds = %b126
+  br label %b128
+
+b128:                                             ; preds = %b127
+  %v17 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @g5, i64 0, i64 0), i64 undef)
+          to label %b129 unwind label %b116
+
+b129:                                             ; preds = %b128
+  br label %b130
+
+b130:                                             ; preds = %b129, %b115, %b75
+  br label %b59
+
+b131:                                             ; preds = %b116, %b113, %b76
+  br label %b200
+
+b132:                                             ; preds = %b161, %b60
+  br label %b133
+
+b133:                                             ; preds = %b132
+  br i1 undef, label %b137, label %b134
+
+b134:                                             ; preds = %b133
+  invoke void @f2(%s.0* sret align 8 undef, %s.92* undef)
+          to label %b135 unwind label %b182
+
+b135:                                             ; preds = %b134
+  br label %b163
+
+b136:                                             ; No predecessors!
+  %v18 = landingpad { i8*, i32 }
+          cleanup
+  br label %b162
+
+b137:                                             ; preds = %b133
+  br label %b138
+
+b138:                                             ; preds = %b137
+  %v19 = invoke i64 @f5(%s.170* nonnull undef, %s.0* nonnull align 8 dereferenceable(24) undef)
+          to label %b139 unwind label %b153
+
+b139:                                             ; preds = %b138
+  br i1 undef, label %b140, label %b154
+
+b140:                                             ; preds = %b139
+  %v20 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @g6, i64 0, i64 0), i64 undef)
+          to label %b141 unwind label %b153
+
+b141:                                             ; preds = %b140
+  br label %b142
+
+b142:                                             ; preds = %b141
+  br label %b143
+
+b143:                                             ; preds = %b142
+  br i1 undef, label %b144, label %b145
+
+b144:                                             ; preds = %b143
+  br label %b146
+
+b145:                                             ; preds = %b143
+  br label %b146
+
+b146:                                             ; preds = %b145, %b144
+  br i1 undef, label %b147, label %b148
+
+b147:                                             ; preds = %b146
+  br label %b149
+
+b148:                                             ; preds = %b146
+  br label %b149
+
+b149:                                             ; preds = %b148, %b147
+  %v21 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* undef, i64 undef)
+          to label %b150 unwind label %b153
+
+b150:                                             ; preds = %b149
+  br label %b151
+
+b151:                                             ; preds = %b150
+  %v22 = invoke nonnull align 8 dereferenceable(8) %s.82* @f6(%s.82* nonnull align 8 dereferenceable(8) undef, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @g1, i64 0, i64 0), i64 undef)
+          to label %b152 unwind label %b153
+
+b152:                                             ; preds = %b151
+  br label %b154
+
+b153:                                             ; preds = %b151, %b149, %b140, %b138
+  %v23 = landingpad { i8*, i32 }
+          cleanup
+  br label %b162
+
+b154:                                             ; preds = %b152, %b139
+  br i1 undef, label %b158, label %b155
+
+b155:                                             ; preds = %b154
+  br label %b156
+
+b156:                                             ; preds = %b156, %b155
+  br i1 undef, label %b157, label %b156
+
+b157:                                             ; preds = %b156
+  br label %b161
+
+b158:                                             ; preds = %b159, %b154
+  br i1 undef, label %b160, label %b159
+
+b159:                                             ; preds = %b158
+  br label %b158
+
+b160:                                             ; preds = %b158
+  br label %b161
+
+b161:                                             ; preds = %b160, %b157
+  br label %b132
+
+b162:                                             ; preds = %b153, %b136
+  br label %b200
+
+b163:                                             ; preds = %b135
+  br i1 undef, label %b164, label %b165
+
+b164:                                             ; preds = %b163
+  br label %b166
+
+b165:                                             ; preds = %b163
+  br label %b166
+
+b166:                                             ; preds = %b165, %b164
+  br i1 undef, label %b167, label %b170
+
+b167:                                             ; preds = %b166
+  %v24 = invoke i32 @f10(%s.0* nonnull undef, i64 0, i64 -1, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @g0, i64 0, i64 0), i64 undef)
+          to label %b168 unwind label %b169
+
+b168:                                             ; preds = %b167
+  br label %b170
+
+b169:                                             ; preds = %b167
+  %v25 = landingpad { i8*, i32 }
+          catch i8* null
+  unreachable
+
+b170:                                             ; preds = %b168, %b166
+  br i1 undef, label %b171, label %b186
+
+b171:                                             ; preds = %b170
+  invoke void @f3(%s.0* nonnull sret align 8 undef, i8* %a1, i32 %a2)
+          to label %b172 unwind label %b183
+
+b172:                                             ; preds = %b171
+  br i1 undef, label %b173, label %b174
+
+b173:                                             ; preds = %b172
+  br label %b175
+
+b174:                                             ; preds = %b172
+  br label %b175
+
+b175:                                             ; preds = %b174, %b173
+  br i1 undef, label %b176, label %b177
+
+b176:                                             ; preds = %b175
+  br label %b178
+
+b177:                                             ; preds = %b175
+  br label %b178
+
+b178:                                             ; preds = %b177, %b176
+  br i1 undef, label %b179, label %b180
+
+b179:                                             ; preds = %b178
+  br label %b180
+
+b180:                                             ; preds = %b179, %b178
+  unreachable
+
+b181:                                             ; No predecessors!
+  br label %b186
+
+b182:                                             ; preds = %b134
+  %v26 = landingpad { i8*, i32 }
+          cleanup
+  br label %b200
+
+b183:                                             ; preds = %b171
+  %v27 = landingpad { i8*, i32 }
+          cleanup
+  br i1 undef, label %b184, label %b185
+
+b184:                                             ; preds = %b183
+  br label %b185
+
+b185:                                             ; preds = %b184, %b183
+  br label %b200
+
+b186:                                             ; preds = %b181, %b170
+  br i1 undef, label %b187, label %b188
+
+b187:                                             ; preds = %b186
+  br label %b188
+
+b188:                                             ; preds = %b187, %b186
+  br i1 undef, label %b192, label %b189
+
+b189:                                             ; preds = %b188
+  br i1 undef, label %b191, label %b190
+
+b190:                                             ; preds = %b189
+  br label %b191
+
+b191:                                             ; preds = %b190, %b189
+  br label %b192
+
+b192:                                             ; preds = %b191, %b188
+  br i1 undef, label %b199, label %b193
+
+b193:                                             ; preds = %b192
+  br label %b194
+
+b194:                                             ; preds = %b197, %b193
+  br i1 undef, label %b198, label %b195
+
+b195:                                             ; preds = %b194
+  br i1 undef, label %b196, label %b197
+
+b196:                                             ; preds = %b195
+  br label %b197
+
+b197:                                             ; preds = %b196, %b195
+  br label %b194
+
+b198:                                             ; preds = %b194
+  br label %b199
+
+b199:                                             ; preds = %b198, %b192
+  ret i8* %a3
+
+b200:                                             ; preds = %b185, %b182, %b162, %b131
+  %v28 = getelementptr inbounds %s.90, %s.90* %v0, i64 0, i32 0
+  %v29 = getelementptr inbounds %s.91, %s.91* %v28, i64 0, i32 0
+  br i1 undef, label %b204, label %b201
+
+b201:                                             ; preds = %b200
+  %v30 = load %s.92*, %s.92** %v29, align 8
+  br i1 undef, label %b203, label %b202
+
+b202:                                             ; preds = %b201
+  call void undef(%s.92* nonnull %v30) #2
+  br label %b203
+
+b203:                                             ; preds = %b202, %b201
+  store %s.92* null, %s.92** %v29, align 8
+  br label %b204
+
+b204:                                             ; preds = %b203, %b200
+  br label %b205
+
+b205:                                             ; preds = %b204, %b61
+  br i1 undef, label %b212, label %b206
+
+b206:                                             ; preds = %b205
+  br label %b207
+
+b207:                                             ; preds = %b210, %b206
+  br i1 undef, label %b211, label %b208
+
+b208:                                             ; preds = %b207
+  br i1 undef, label %b209, label %b210
+
+b209:                                             ; preds = %b208
+  br label %b210
+
+b210:                                             ; preds = %b209, %b208
+  br label %b207
+
+b211:                                             ; preds = %b207
+  br label %b212
+
+b212:                                             ; preds = %b211, %b205
+  resume { i8*, i32 } undef
+}
+
+declare hidden i64 @f5(%s.170*, %s.0*) local_unnamed_addr #1 align 2
+
+declare hidden %s.82* @f6(%s.82*, i8*, i64) local_unnamed_addr #1
+
+declare hidden void @f7(%s.0*, i8*) local_unnamed_addr #1
+
+declare dso_local %s.0* @f8(%s.0*, i64, i64) local_unnamed_addr #1
+
+declare hidden void @f9(%s.10*, %s.0*) local_unnamed_addr #1 align 2
+
+declare dso_local i32 @f10(%s.0*, i64, i64, i8*, i64) local_unnamed_addr #1
+
+declare hidden { %s.164*, i8 } @f11(%s.171*, %s.0*, %s.0*) local_unnamed_addr #1 align 2
+
+attributes #0 = { uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { "use-soft-float"="false" }
+attributes #2 = { nounwind }


        


More information about the llvm-commits mailing list