1; RUN: opt -S -dse < %s | FileCheck %s 2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 3 4; This test is not relevant for DSE with MemorySSA. Non-memory instructions 5; are ignored anyways. The limits for the MemorySSA traversal are tested in 6; llvm/test/Transforms/DeadStoreElimination/MSSA/memoryssa-scan-limit.ll 7 8@x = global i32 0, align 4 9 10; Function Attrs: nounwind 11define i32 @test_within_limit() !dbg !4 { 12entry: 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 i32 undef, metadata !10, metadata !DIExpression()), !dbg !DILocation(scope: !4) 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 128define i32 @test_outside_limit() { 129entry: 130 ; The first store; later there is a second store to the same location 131 ; CHECK-NOT: 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 242declare void @llvm.dbg.value(metadata, metadata, metadata) 243 244!llvm.dbg.cu = !{!0} 245!llvm.module.flags = !{!11, !13} 246 247!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.4", isOptimized: true, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2) 248!1 = !DIFile(filename: "test.c", directory: "/home/tmp") 249!2 = !{} 250!4 = distinct !DISubprogram(name: "test_within_limit", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 4, file: !1, scope: !5, type: !6, retainedNodes: !2) 251!5 = !DIFile(filename: "test.c", directory: "/home/tmp") 252!6 = !DISubroutineType(types: !7) 253!7 = !{!8} 254!8 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed) 255!9 = !{!10} 256!10 = !DILocalVariable(name: "x", scope: !4, type: !8) 257!11 = !{i32 2, !"Dwarf Version", i32 4} 258!12 = !{i32* undef} 259 260!13 = !{i32 1, !"Debug Info Version", i32 3} 261