261 lines · plain
1; RUN: opt -S -passes=dse < %s | FileCheck %s2target 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 instructions5; are ignored anyways. The limits for the MemorySSA traversal are tested in6; llvm/test/Transforms/DeadStoreElimination/MSSA/memoryssa-scan-limit.ll7 8@x = global i32 0, align 49 10; Function Attrs: nounwind11define 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, ptr @x, align 416 store i32 1, ptr @x, align 417 18 ; Insert 98 dummy instructions between the two stores19 %0 = bitcast i32 0 to i3220 %1 = bitcast i32 0 to i3221 %2 = bitcast i32 0 to i3222 %3 = bitcast i32 0 to i3223 %4 = bitcast i32 0 to i3224 %5 = bitcast i32 0 to i3225 %6 = bitcast i32 0 to i3226 %7 = bitcast i32 0 to i3227 %8 = bitcast i32 0 to i3228 %9 = bitcast i32 0 to i3229 %10 = bitcast i32 0 to i3230 %11 = bitcast i32 0 to i3231 %12 = bitcast i32 0 to i3232 %13 = bitcast i32 0 to i3233 %14 = bitcast i32 0 to i3234 %15 = bitcast i32 0 to i3235 %16 = bitcast i32 0 to i3236 %17 = bitcast i32 0 to i3237 %18 = bitcast i32 0 to i3238 %19 = bitcast i32 0 to i3239 %20 = bitcast i32 0 to i3240 %21 = bitcast i32 0 to i3241 %22 = bitcast i32 0 to i3242 %23 = bitcast i32 0 to i3243 %24 = bitcast i32 0 to i3244 %25 = bitcast i32 0 to i3245 %26 = bitcast i32 0 to i3246 %27 = bitcast i32 0 to i3247 %28 = bitcast i32 0 to i3248 %29 = bitcast i32 0 to i3249 %30 = bitcast i32 0 to i3250 %31 = bitcast i32 0 to i3251 %32 = bitcast i32 0 to i3252 %33 = bitcast i32 0 to i3253 %34 = bitcast i32 0 to i3254 %35 = bitcast i32 0 to i3255 %36 = bitcast i32 0 to i3256 %37 = bitcast i32 0 to i3257 %38 = bitcast i32 0 to i3258 %39 = bitcast i32 0 to i3259 %40 = bitcast i32 0 to i3260 %41 = bitcast i32 0 to i3261 %42 = bitcast i32 0 to i3262 %43 = bitcast i32 0 to i3263 %44 = bitcast i32 0 to i3264 %45 = bitcast i32 0 to i3265 %46 = bitcast i32 0 to i3266 %47 = bitcast i32 0 to i3267 %48 = bitcast i32 0 to i3268 %49 = bitcast i32 0 to i3269 %50 = bitcast i32 0 to i3270 %51 = bitcast i32 0 to i3271 %52 = bitcast i32 0 to i3272 %53 = bitcast i32 0 to i3273 %54 = bitcast i32 0 to i3274 %55 = bitcast i32 0 to i3275 %56 = bitcast i32 0 to i3276 %57 = bitcast i32 0 to i3277 %58 = bitcast i32 0 to i3278 %59 = bitcast i32 0 to i3279 %60 = bitcast i32 0 to i3280 %61 = bitcast i32 0 to i3281 %62 = bitcast i32 0 to i3282 %63 = bitcast i32 0 to i3283 %64 = bitcast i32 0 to i3284 %65 = bitcast i32 0 to i3285 %66 = bitcast i32 0 to i3286 %67 = bitcast i32 0 to i3287 %68 = bitcast i32 0 to i3288 %69 = bitcast i32 0 to i3289 %70 = bitcast i32 0 to i3290 %71 = bitcast i32 0 to i3291 %72 = bitcast i32 0 to i3292 %73 = bitcast i32 0 to i3293 %74 = bitcast i32 0 to i3294 %75 = bitcast i32 0 to i3295 %76 = bitcast i32 0 to i3296 %77 = bitcast i32 0 to i3297 %78 = bitcast i32 0 to i3298 %79 = bitcast i32 0 to i3299 %80 = bitcast i32 0 to i32100 %81 = bitcast i32 0 to i32101 %82 = bitcast i32 0 to i32102 %83 = bitcast i32 0 to i32103 %84 = bitcast i32 0 to i32104 %85 = bitcast i32 0 to i32105 %86 = bitcast i32 0 to i32106 %87 = bitcast i32 0 to i32107 %88 = bitcast i32 0 to i32108 %89 = bitcast i32 0 to i32109 %90 = bitcast i32 0 to i32110 %91 = bitcast i32 0 to i32111 %92 = bitcast i32 0 to i32112 %93 = bitcast i32 0 to i32113 %94 = bitcast i32 0 to i32114 %95 = bitcast i32 0 to i32115 %96 = bitcast i32 0 to i32116 %97 = bitcast i32 0 to i32117 118 ; Insert a meaningless dbg.value intrinsic; it should have no119 ; 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, ptr @x, align 4123 store i32 -1, ptr @x, align 4124 ret i32 0125}126 127; Function Attrs: nounwind128define i32 @test_outside_limit() {129entry:130 ; The first store; later there is a second store to the same location131 ; CHECK-NOT: store i32 1, ptr @x, align 4132 store i32 1, ptr @x, align 4133 134 ; Insert 99 dummy instructions between the two stores; this is135 ; one too many instruction for the DSE to take place.136 %0 = bitcast i32 0 to i32137 %1 = bitcast i32 0 to i32138 %2 = bitcast i32 0 to i32139 %3 = bitcast i32 0 to i32140 %4 = bitcast i32 0 to i32141 %5 = bitcast i32 0 to i32142 %6 = bitcast i32 0 to i32143 %7 = bitcast i32 0 to i32144 %8 = bitcast i32 0 to i32145 %9 = bitcast i32 0 to i32146 %10 = bitcast i32 0 to i32147 %11 = bitcast i32 0 to i32148 %12 = bitcast i32 0 to i32149 %13 = bitcast i32 0 to i32150 %14 = bitcast i32 0 to i32151 %15 = bitcast i32 0 to i32152 %16 = bitcast i32 0 to i32153 %17 = bitcast i32 0 to i32154 %18 = bitcast i32 0 to i32155 %19 = bitcast i32 0 to i32156 %20 = bitcast i32 0 to i32157 %21 = bitcast i32 0 to i32158 %22 = bitcast i32 0 to i32159 %23 = bitcast i32 0 to i32160 %24 = bitcast i32 0 to i32161 %25 = bitcast i32 0 to i32162 %26 = bitcast i32 0 to i32163 %27 = bitcast i32 0 to i32164 %28 = bitcast i32 0 to i32165 %29 = bitcast i32 0 to i32166 %30 = bitcast i32 0 to i32167 %31 = bitcast i32 0 to i32168 %32 = bitcast i32 0 to i32169 %33 = bitcast i32 0 to i32170 %34 = bitcast i32 0 to i32171 %35 = bitcast i32 0 to i32172 %36 = bitcast i32 0 to i32173 %37 = bitcast i32 0 to i32174 %38 = bitcast i32 0 to i32175 %39 = bitcast i32 0 to i32176 %40 = bitcast i32 0 to i32177 %41 = bitcast i32 0 to i32178 %42 = bitcast i32 0 to i32179 %43 = bitcast i32 0 to i32180 %44 = bitcast i32 0 to i32181 %45 = bitcast i32 0 to i32182 %46 = bitcast i32 0 to i32183 %47 = bitcast i32 0 to i32184 %48 = bitcast i32 0 to i32185 %49 = bitcast i32 0 to i32186 %50 = bitcast i32 0 to i32187 %51 = bitcast i32 0 to i32188 %52 = bitcast i32 0 to i32189 %53 = bitcast i32 0 to i32190 %54 = bitcast i32 0 to i32191 %55 = bitcast i32 0 to i32192 %56 = bitcast i32 0 to i32193 %57 = bitcast i32 0 to i32194 %58 = bitcast i32 0 to i32195 %59 = bitcast i32 0 to i32196 %60 = bitcast i32 0 to i32197 %61 = bitcast i32 0 to i32198 %62 = bitcast i32 0 to i32199 %63 = bitcast i32 0 to i32200 %64 = bitcast i32 0 to i32201 %65 = bitcast i32 0 to i32202 %66 = bitcast i32 0 to i32203 %67 = bitcast i32 0 to i32204 %68 = bitcast i32 0 to i32205 %69 = bitcast i32 0 to i32206 %70 = bitcast i32 0 to i32207 %71 = bitcast i32 0 to i32208 %72 = bitcast i32 0 to i32209 %73 = bitcast i32 0 to i32210 %74 = bitcast i32 0 to i32211 %75 = bitcast i32 0 to i32212 %76 = bitcast i32 0 to i32213 %77 = bitcast i32 0 to i32214 %78 = bitcast i32 0 to i32215 %79 = bitcast i32 0 to i32216 %80 = bitcast i32 0 to i32217 %81 = bitcast i32 0 to i32218 %82 = bitcast i32 0 to i32219 %83 = bitcast i32 0 to i32220 %84 = bitcast i32 0 to i32221 %85 = bitcast i32 0 to i32222 %86 = bitcast i32 0 to i32223 %87 = bitcast i32 0 to i32224 %88 = bitcast i32 0 to i32225 %89 = bitcast i32 0 to i32226 %90 = bitcast i32 0 to i32227 %91 = bitcast i32 0 to i32228 %92 = bitcast i32 0 to i32229 %93 = bitcast i32 0 to i32230 %94 = bitcast i32 0 to i32231 %95 = bitcast i32 0 to i32232 %96 = bitcast i32 0 to i32233 %97 = bitcast i32 0 to i32234 %98 = bitcast i32 0 to i32235 236 ; CHECK: store i32 -1, ptr @x, align 4237 store i32 -1, ptr @x, align 4238 ret i32 0239}240 241; Function Attrs: nounwind readnone242declare 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 = !{ptr undef}259 260!13 = !{i32 1, !"Debug Info Version", i32 3}261