[llvm] r278514 - [LVI] Fix potential memory corruption in getValueFromCondition
Artur Pilipenko via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 12 08:08:15 PDT 2016
Author: apilipenko
Date: Fri Aug 12 10:08:15 2016
New Revision: 278514
URL: http://llvm.org/viewvc/llvm-project?rev=278514&view=rev
Log:
[LVI] Fix potential memory corruption in getValueFromCondition
Rewrite Visited[Cond] = getValueFromConditionImpl(..., Visited) statement which can lead to a memory corruption since getValueFromConditionImpl changes Visited map and invalidates the iterators.
Modified:
llvm/trunk/lib/Analysis/LazyValueInfo.cpp
llvm/trunk/test/Transforms/CorrelatedValuePropagation/crash.ll
Modified: llvm/trunk/lib/Analysis/LazyValueInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LazyValueInfo.cpp?rev=278514&r1=278513&r2=278514&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/LazyValueInfo.cpp (original)
+++ llvm/trunk/lib/Analysis/LazyValueInfo.cpp Fri Aug 12 10:08:15 2016
@@ -1260,8 +1260,10 @@ getValueFromCondition(Value *Val, Value
auto I = Visited.find(Cond);
if (I != Visited.end())
return I->second;
- return Visited[Cond] = getValueFromConditionImpl(Val, Cond, isTrueDest,
- Visited);
+
+ auto Result = getValueFromConditionImpl(Val, Cond, isTrueDest, Visited);
+ Visited[Cond] = Result;
+ return Result;
}
LVILatticeVal getValueFromCondition(Value *Val, Value *Cond, bool isTrueDest) {
Modified: llvm/trunk/test/Transforms/CorrelatedValuePropagation/crash.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CorrelatedValuePropagation/crash.ll?rev=278514&r1=278513&r2=278514&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/CorrelatedValuePropagation/crash.ll (original)
+++ llvm/trunk/test/Transforms/CorrelatedValuePropagation/crash.ll Fri Aug 12 10:08:15 2016
@@ -60,3 +60,143 @@ if.else.i:
return: ; preds = %for.cond.i, %for.body
ret void
}
+
+define i1 @test4(i32 %int) {
+ %a0 = icmp ult i32 %int, 100
+ %a1 = and i1 %a0, %a0
+ %a2 = and i1 %a1, %a1
+ %a3 = and i1 %a2, %a2
+ %a4 = and i1 %a3, %a3
+ %a5 = and i1 %a4, %a4
+ %a6 = and i1 %a5, %a5
+ %a7 = and i1 %a6, %a6
+ %a8 = and i1 %a7, %a7
+ %a9 = and i1 %a8, %a8
+ %a10 = and i1 %a9, %a9
+ %a11 = and i1 %a10, %a10
+ %a12 = and i1 %a11, %a11
+ %a13 = and i1 %a12, %a12
+ %a14 = and i1 %a13, %a13
+ %a15 = and i1 %a14, %a14
+ %a16 = and i1 %a15, %a15
+ %a17 = and i1 %a16, %a16
+ %a18 = and i1 %a17, %a17
+ %a19 = and i1 %a18, %a18
+ %a20 = and i1 %a19, %a19
+ %a21 = and i1 %a20, %a20
+ %a22 = and i1 %a21, %a21
+ %a23 = and i1 %a22, %a22
+ %a24 = and i1 %a23, %a23
+ %a25 = and i1 %a24, %a24
+ %a26 = and i1 %a25, %a25
+ %a27 = and i1 %a26, %a26
+ %a28 = and i1 %a27, %a27
+ %a29 = and i1 %a28, %a28
+ %a30 = and i1 %a29, %a29
+ %a31 = and i1 %a30, %a30
+ %a32 = and i1 %a31, %a31
+ %a33 = and i1 %a32, %a32
+ %a34 = and i1 %a33, %a33
+ %a35 = and i1 %a34, %a34
+ %a36 = and i1 %a35, %a35
+ %a37 = and i1 %a36, %a36
+ %a38 = and i1 %a37, %a37
+ %a39 = and i1 %a38, %a38
+ %a40 = and i1 %a39, %a39
+ %a41 = and i1 %a40, %a40
+ %a42 = and i1 %a41, %a41
+ %a43 = and i1 %a42, %a42
+ %a44 = and i1 %a43, %a43
+ %a45 = and i1 %a44, %a44
+ %a46 = and i1 %a45, %a45
+ %a47 = and i1 %a46, %a46
+ %a48 = and i1 %a47, %a47
+ %a49 = and i1 %a48, %a48
+ %a50 = and i1 %a49, %a49
+ %a51 = and i1 %a50, %a50
+ %a52 = and i1 %a51, %a51
+ %a53 = and i1 %a52, %a52
+ %a54 = and i1 %a53, %a53
+ %a55 = and i1 %a54, %a54
+ %a56 = and i1 %a55, %a55
+ %a57 = and i1 %a56, %a56
+ %a58 = and i1 %a57, %a57
+ %a59 = and i1 %a58, %a58
+ %a60 = and i1 %a59, %a59
+ %a61 = and i1 %a60, %a60
+ %a62 = and i1 %a61, %a61
+ %a63 = and i1 %a62, %a62
+ %a64 = and i1 %a63, %a63
+ %a65 = and i1 %a64, %a64
+ %a66 = and i1 %a65, %a65
+ %a67 = and i1 %a66, %a66
+ %a68 = and i1 %a67, %a67
+ %a69 = and i1 %a68, %a68
+ %a70 = and i1 %a69, %a69
+ %a71 = and i1 %a70, %a70
+ %a72 = and i1 %a71, %a71
+ %a73 = and i1 %a72, %a72
+ %a74 = and i1 %a73, %a73
+ %a75 = and i1 %a74, %a74
+ %a76 = and i1 %a75, %a75
+ %a77 = and i1 %a76, %a76
+ %a78 = and i1 %a77, %a77
+ %a79 = and i1 %a78, %a78
+ %a80 = and i1 %a79, %a79
+ %a81 = and i1 %a80, %a80
+ %a82 = and i1 %a81, %a81
+ %a83 = and i1 %a82, %a82
+ %a84 = and i1 %a83, %a83
+ %a85 = and i1 %a84, %a84
+ %a86 = and i1 %a85, %a85
+ %a87 = and i1 %a86, %a86
+ %a88 = and i1 %a87, %a87
+ %a89 = and i1 %a88, %a88
+ %a90 = and i1 %a89, %a89
+ %a91 = and i1 %a90, %a90
+ %a92 = and i1 %a91, %a91
+ %a93 = and i1 %a92, %a92
+ %a94 = and i1 %a93, %a93
+ %a95 = and i1 %a94, %a94
+ %a96 = and i1 %a95, %a95
+ %a97 = and i1 %a96, %a96
+ %a98 = and i1 %a97, %a97
+ %a99 = and i1 %a98, %a98
+ %a100 = and i1 %a99, %a99
+ %a101 = and i1 %a100, %a100
+ %a102 = and i1 %a101, %a101
+ %a103 = and i1 %a102, %a102
+ %a104 = and i1 %a103, %a103
+ %a105 = and i1 %a104, %a104
+ %a106 = and i1 %a105, %a105
+ %a107 = and i1 %a106, %a106
+ %a108 = and i1 %a107, %a107
+ %a109 = and i1 %a108, %a108
+ %a110 = and i1 %a109, %a109
+ %a111 = and i1 %a110, %a110
+ %a112 = and i1 %a111, %a111
+ %a113 = and i1 %a112, %a112
+ %a114 = and i1 %a113, %a113
+ %a115 = and i1 %a114, %a114
+ %a116 = and i1 %a115, %a115
+ %a117 = and i1 %a116, %a116
+ %a118 = and i1 %a117, %a117
+ %a119 = and i1 %a118, %a118
+ %a120 = and i1 %a119, %a119
+ %a121 = and i1 %a120, %a120
+ %a122 = and i1 %a121, %a121
+ %a123 = and i1 %a122, %a122
+ %a124 = and i1 %a123, %a123
+ %a125 = and i1 %a124, %a124
+ %a126 = and i1 %a125, %a125
+ %a127 = and i1 %a126, %a126
+ %cond = and i1 %a127, %a127
+ br i1 %cond, label %then, label %else
+
+then:
+ %result = icmp eq i32 %int, 255
+ ret i1 %result
+
+else:
+ ret i1 false
+}
More information about the llvm-commits
mailing list