Yunzhong Gao | 5cbcf56 | 2013-11-14 01:10:52 +0000 | [diff] [blame] | 1 | ; RUN: opt -S -dse < %s | FileCheck %s |
| 2 | |
| 3 | ; If there are two stores to the same location, DSE should be able to remove |
| 4 | ; the first store if the two stores are separated by no more than 98 |
| 5 | ; instructions. The existence of debug intrinsics between the stores should |
| 6 | ; not affect this instruction limit. |
| 7 | |
| 8 | @x = global i32 0, align 4 |
| 9 | |
| 10 | ; Function Attrs: nounwind |
| 11 | define i32 @test_within_limit() { |
| 12 | entry: |
| 13 | ; The first store; later there is a second store to the same location, |
| 14 | ; so this store should be optimized away by DSE. |
| 15 | ; CHECK-NOT: store i32 1, i32* @x, align 4 |
| 16 | store i32 1, i32* @x, align 4 |
| 17 | |
| 18 | ; Insert 98 dummy instructions between the two stores |
| 19 | %0 = bitcast i32 0 to i32 |
| 20 | %1 = bitcast i32 0 to i32 |
| 21 | %2 = bitcast i32 0 to i32 |
| 22 | %3 = bitcast i32 0 to i32 |
| 23 | %4 = bitcast i32 0 to i32 |
| 24 | %5 = bitcast i32 0 to i32 |
| 25 | %6 = bitcast i32 0 to i32 |
| 26 | %7 = bitcast i32 0 to i32 |
| 27 | %8 = bitcast i32 0 to i32 |
| 28 | %9 = bitcast i32 0 to i32 |
| 29 | %10 = bitcast i32 0 to i32 |
| 30 | %11 = bitcast i32 0 to i32 |
| 31 | %12 = bitcast i32 0 to i32 |
| 32 | %13 = bitcast i32 0 to i32 |
| 33 | %14 = bitcast i32 0 to i32 |
| 34 | %15 = bitcast i32 0 to i32 |
| 35 | %16 = bitcast i32 0 to i32 |
| 36 | %17 = bitcast i32 0 to i32 |
| 37 | %18 = bitcast i32 0 to i32 |
| 38 | %19 = bitcast i32 0 to i32 |
| 39 | %20 = bitcast i32 0 to i32 |
| 40 | %21 = bitcast i32 0 to i32 |
| 41 | %22 = bitcast i32 0 to i32 |
| 42 | %23 = bitcast i32 0 to i32 |
| 43 | %24 = bitcast i32 0 to i32 |
| 44 | %25 = bitcast i32 0 to i32 |
| 45 | %26 = bitcast i32 0 to i32 |
| 46 | %27 = bitcast i32 0 to i32 |
| 47 | %28 = bitcast i32 0 to i32 |
| 48 | %29 = bitcast i32 0 to i32 |
| 49 | %30 = bitcast i32 0 to i32 |
| 50 | %31 = bitcast i32 0 to i32 |
| 51 | %32 = bitcast i32 0 to i32 |
| 52 | %33 = bitcast i32 0 to i32 |
| 53 | %34 = bitcast i32 0 to i32 |
| 54 | %35 = bitcast i32 0 to i32 |
| 55 | %36 = bitcast i32 0 to i32 |
| 56 | %37 = bitcast i32 0 to i32 |
| 57 | %38 = bitcast i32 0 to i32 |
| 58 | %39 = bitcast i32 0 to i32 |
| 59 | %40 = bitcast i32 0 to i32 |
| 60 | %41 = bitcast i32 0 to i32 |
| 61 | %42 = bitcast i32 0 to i32 |
| 62 | %43 = bitcast i32 0 to i32 |
| 63 | %44 = bitcast i32 0 to i32 |
| 64 | %45 = bitcast i32 0 to i32 |
| 65 | %46 = bitcast i32 0 to i32 |
| 66 | %47 = bitcast i32 0 to i32 |
| 67 | %48 = bitcast i32 0 to i32 |
| 68 | %49 = bitcast i32 0 to i32 |
| 69 | %50 = bitcast i32 0 to i32 |
| 70 | %51 = bitcast i32 0 to i32 |
| 71 | %52 = bitcast i32 0 to i32 |
| 72 | %53 = bitcast i32 0 to i32 |
| 73 | %54 = bitcast i32 0 to i32 |
| 74 | %55 = bitcast i32 0 to i32 |
| 75 | %56 = bitcast i32 0 to i32 |
| 76 | %57 = bitcast i32 0 to i32 |
| 77 | %58 = bitcast i32 0 to i32 |
| 78 | %59 = bitcast i32 0 to i32 |
| 79 | %60 = bitcast i32 0 to i32 |
| 80 | %61 = bitcast i32 0 to i32 |
| 81 | %62 = bitcast i32 0 to i32 |
| 82 | %63 = bitcast i32 0 to i32 |
| 83 | %64 = bitcast i32 0 to i32 |
| 84 | %65 = bitcast i32 0 to i32 |
| 85 | %66 = bitcast i32 0 to i32 |
| 86 | %67 = bitcast i32 0 to i32 |
| 87 | %68 = bitcast i32 0 to i32 |
| 88 | %69 = bitcast i32 0 to i32 |
| 89 | %70 = bitcast i32 0 to i32 |
| 90 | %71 = bitcast i32 0 to i32 |
| 91 | %72 = bitcast i32 0 to i32 |
| 92 | %73 = bitcast i32 0 to i32 |
| 93 | %74 = bitcast i32 0 to i32 |
| 94 | %75 = bitcast i32 0 to i32 |
| 95 | %76 = bitcast i32 0 to i32 |
| 96 | %77 = bitcast i32 0 to i32 |
| 97 | %78 = bitcast i32 0 to i32 |
| 98 | %79 = bitcast i32 0 to i32 |
| 99 | %80 = bitcast i32 0 to i32 |
| 100 | %81 = bitcast i32 0 to i32 |
| 101 | %82 = bitcast i32 0 to i32 |
| 102 | %83 = bitcast i32 0 to i32 |
| 103 | %84 = bitcast i32 0 to i32 |
| 104 | %85 = bitcast i32 0 to i32 |
| 105 | %86 = bitcast i32 0 to i32 |
| 106 | %87 = bitcast i32 0 to i32 |
| 107 | %88 = bitcast i32 0 to i32 |
| 108 | %89 = bitcast i32 0 to i32 |
| 109 | %90 = bitcast i32 0 to i32 |
| 110 | %91 = bitcast i32 0 to i32 |
| 111 | %92 = bitcast i32 0 to i32 |
| 112 | %93 = bitcast i32 0 to i32 |
| 113 | %94 = bitcast i32 0 to i32 |
| 114 | %95 = bitcast i32 0 to i32 |
| 115 | %96 = bitcast i32 0 to i32 |
| 116 | %97 = bitcast i32 0 to i32 |
| 117 | |
| 118 | ; Insert a meaningless dbg.value intrinsic; it should have no |
| 119 | ; effect on the working of DSE in any way. |
| 120 | call void @llvm.dbg.value(metadata !12, i64 0, metadata !10) |
| 121 | |
| 122 | ; CHECK: store i32 -1, i32* @x, align 4 |
| 123 | store i32 -1, i32* @x, align 4 |
| 124 | ret i32 0 |
| 125 | } |
| 126 | |
| 127 | ; Function Attrs: nounwind |
| 128 | define i32 @test_outside_limit() { |
| 129 | entry: |
| 130 | ; The first store; later there is a second store to the same location |
| 131 | ; CHECK: store i32 1, i32* @x, align 4 |
| 132 | store i32 1, i32* @x, align 4 |
| 133 | |
| 134 | ; Insert 99 dummy instructions between the two stores; this is |
| 135 | ; one too many instruction for the DSE to take place. |
| 136 | %0 = bitcast i32 0 to i32 |
| 137 | %1 = bitcast i32 0 to i32 |
| 138 | %2 = bitcast i32 0 to i32 |
| 139 | %3 = bitcast i32 0 to i32 |
| 140 | %4 = bitcast i32 0 to i32 |
| 141 | %5 = bitcast i32 0 to i32 |
| 142 | %6 = bitcast i32 0 to i32 |
| 143 | %7 = bitcast i32 0 to i32 |
| 144 | %8 = bitcast i32 0 to i32 |
| 145 | %9 = bitcast i32 0 to i32 |
| 146 | %10 = bitcast i32 0 to i32 |
| 147 | %11 = bitcast i32 0 to i32 |
| 148 | %12 = bitcast i32 0 to i32 |
| 149 | %13 = bitcast i32 0 to i32 |
| 150 | %14 = bitcast i32 0 to i32 |
| 151 | %15 = bitcast i32 0 to i32 |
| 152 | %16 = bitcast i32 0 to i32 |
| 153 | %17 = bitcast i32 0 to i32 |
| 154 | %18 = bitcast i32 0 to i32 |
| 155 | %19 = bitcast i32 0 to i32 |
| 156 | %20 = bitcast i32 0 to i32 |
| 157 | %21 = bitcast i32 0 to i32 |
| 158 | %22 = bitcast i32 0 to i32 |
| 159 | %23 = bitcast i32 0 to i32 |
| 160 | %24 = bitcast i32 0 to i32 |
| 161 | %25 = bitcast i32 0 to i32 |
| 162 | %26 = bitcast i32 0 to i32 |
| 163 | %27 = bitcast i32 0 to i32 |
| 164 | %28 = bitcast i32 0 to i32 |
| 165 | %29 = bitcast i32 0 to i32 |
| 166 | %30 = bitcast i32 0 to i32 |
| 167 | %31 = bitcast i32 0 to i32 |
| 168 | %32 = bitcast i32 0 to i32 |
| 169 | %33 = bitcast i32 0 to i32 |
| 170 | %34 = bitcast i32 0 to i32 |
| 171 | %35 = bitcast i32 0 to i32 |
| 172 | %36 = bitcast i32 0 to i32 |
| 173 | %37 = bitcast i32 0 to i32 |
| 174 | %38 = bitcast i32 0 to i32 |
| 175 | %39 = bitcast i32 0 to i32 |
| 176 | %40 = bitcast i32 0 to i32 |
| 177 | %41 = bitcast i32 0 to i32 |
| 178 | %42 = bitcast i32 0 to i32 |
| 179 | %43 = bitcast i32 0 to i32 |
| 180 | %44 = bitcast i32 0 to i32 |
| 181 | %45 = bitcast i32 0 to i32 |
| 182 | %46 = bitcast i32 0 to i32 |
| 183 | %47 = bitcast i32 0 to i32 |
| 184 | %48 = bitcast i32 0 to i32 |
| 185 | %49 = bitcast i32 0 to i32 |
| 186 | %50 = bitcast i32 0 to i32 |
| 187 | %51 = bitcast i32 0 to i32 |
| 188 | %52 = bitcast i32 0 to i32 |
| 189 | %53 = bitcast i32 0 to i32 |
| 190 | %54 = bitcast i32 0 to i32 |
| 191 | %55 = bitcast i32 0 to i32 |
| 192 | %56 = bitcast i32 0 to i32 |
| 193 | %57 = bitcast i32 0 to i32 |
| 194 | %58 = bitcast i32 0 to i32 |
| 195 | %59 = bitcast i32 0 to i32 |
| 196 | %60 = bitcast i32 0 to i32 |
| 197 | %61 = bitcast i32 0 to i32 |
| 198 | %62 = bitcast i32 0 to i32 |
| 199 | %63 = bitcast i32 0 to i32 |
| 200 | %64 = bitcast i32 0 to i32 |
| 201 | %65 = bitcast i32 0 to i32 |
| 202 | %66 = bitcast i32 0 to i32 |
| 203 | %67 = bitcast i32 0 to i32 |
| 204 | %68 = bitcast i32 0 to i32 |
| 205 | %69 = bitcast i32 0 to i32 |
| 206 | %70 = bitcast i32 0 to i32 |
| 207 | %71 = bitcast i32 0 to i32 |
| 208 | %72 = bitcast i32 0 to i32 |
| 209 | %73 = bitcast i32 0 to i32 |
| 210 | %74 = bitcast i32 0 to i32 |
| 211 | %75 = bitcast i32 0 to i32 |
| 212 | %76 = bitcast i32 0 to i32 |
| 213 | %77 = bitcast i32 0 to i32 |
| 214 | %78 = bitcast i32 0 to i32 |
| 215 | %79 = bitcast i32 0 to i32 |
| 216 | %80 = bitcast i32 0 to i32 |
| 217 | %81 = bitcast i32 0 to i32 |
| 218 | %82 = bitcast i32 0 to i32 |
| 219 | %83 = bitcast i32 0 to i32 |
| 220 | %84 = bitcast i32 0 to i32 |
| 221 | %85 = bitcast i32 0 to i32 |
| 222 | %86 = bitcast i32 0 to i32 |
| 223 | %87 = bitcast i32 0 to i32 |
| 224 | %88 = bitcast i32 0 to i32 |
| 225 | %89 = bitcast i32 0 to i32 |
| 226 | %90 = bitcast i32 0 to i32 |
| 227 | %91 = bitcast i32 0 to i32 |
| 228 | %92 = bitcast i32 0 to i32 |
| 229 | %93 = bitcast i32 0 to i32 |
| 230 | %94 = bitcast i32 0 to i32 |
| 231 | %95 = bitcast i32 0 to i32 |
| 232 | %96 = bitcast i32 0 to i32 |
| 233 | %97 = bitcast i32 0 to i32 |
| 234 | %98 = bitcast i32 0 to i32 |
| 235 | |
| 236 | ; CHECK: store i32 -1, i32* @x, align 4 |
| 237 | store i32 -1, i32* @x, align 4 |
| 238 | ret i32 0 |
| 239 | } |
| 240 | |
| 241 | ; Function Attrs: nounwind readnone |
| 242 | declare void @llvm.dbg.value(metadata, i64, metadata) |
| 243 | |
| 244 | !llvm.dbg.cu = !{!0} |
Manman Ren | 409558f | 2013-11-22 21:49:45 +0000 | [diff] [blame] | 245 | !llvm.module.flags = !{!11, !13} |
Yunzhong Gao | 5cbcf56 | 2013-11-14 01:10:52 +0000 | [diff] [blame] | 246 | |
| 247 | !0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.4", i1 true, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !9, metadata !2, metadata !""} ; [ DW_TAG_compile_unit ] [/home/tmp/test.c] [DW_LANG_C99] |
| 248 | !1 = metadata !{metadata !"test.c", metadata !"/home/tmp"} |
| 249 | !2 = metadata !{i32 0} |
| 250 | !3 = metadata !{metadata !4} |
| 251 | !4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"test_within_limit", metadata !"test_within_limit", metadata !"", i32 3, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @test_within_limit, null, null, metadata !2, i32 4} ; [ DW_TAG_subprogram ] [line 3] [def] [scope 4] [test] |
| 252 | !5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/home/tmp/test.c] |
| 253 | !6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] |
| 254 | !7 = metadata !{metadata !8} |
| 255 | !8 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] |
| 256 | !9 = metadata !{metadata !10} |
| 257 | !10 = metadata !{i32 786484, i32 0, null, metadata !"x", metadata !"x", metadata !"", metadata !5, i32 1, metadata !8, i32 0, i32 1, i32* @x, null} ; [ DW_TAG_variable ] [x] [line 1] [def] |
| 258 | !11 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} |
| 259 | !12 = metadata !{i32* undef} |
| 260 | |
Manman Ren | 409558f | 2013-11-22 21:49:45 +0000 | [diff] [blame] | 261 | !13 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} |