brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 5ee4922 Raw
47 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=dse -S | FileCheck %s3 4@BUFFER = external dso_local local_unnamed_addr global [0 x i8], align 15 6define void @MissedDSEOpportunity(i64 %idx, ptr noalias %cc) {7;8; The DSE pass will try to kill the store in the loop exit block using the9; store in the function exit block. The loop invariant check on the pointer10; used by the stores should trivially return true because a pointer defined11; in the entry block of a function is loop invariant by definition. In fact12; the entry block of a function cannot have predecessors or be part of a loop.13;14; CHECK-LABEL: @MissedDSEOpportunity(15; CHECK-NEXT:  entry:16; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [0 x i8], ptr @BUFFER, i64 0, i64 [[IDX:%.*]]17; CHECK-NEXT:    [[CC0:%.*]] = load volatile i1, ptr [[CC:%.*]], align 118; CHECK-NEXT:    br i1 [[CC0]], label [[HEAD:%.*]], label [[EXIT:%.*]]19; CHECK:       head:20; CHECK-NEXT:    [[CC1:%.*]] = load volatile i1, ptr [[CC]], align 121; CHECK-NEXT:    br i1 [[CC1]], label [[HEAD]], label [[EXIT_LOOPEXIT:%.*]]22; CHECK:       exit.loopexit:23; CHECK-NEXT:    br label [[EXIT]]24; CHECK:       exit:25; CHECK-NEXT:    store i64 0, ptr [[GEP]], align 426; CHECK-NEXT:    ret void27;28entry:29  ; The entry block cannot have predecessors or be part of a loop30  %gep = getelementptr inbounds [0 x i8], ptr @BUFFER, i64 0, i64 %idx31  %cc0 = load volatile i1, ptr %cc, align 132  br i1 %cc0, label %head, label %exit33 34head:                                             ; preds = %entry, %head35  %cc1 = load volatile i1, ptr %cc, align 136  br i1 %cc1, label %head, label %exit.loopexit37 38exit.loopexit:                                    ; preds = %head39  ; Dead store40  store i64 2, ptr %gep, align 441  br label %exit42 43exit:                                             ; preds = %exit.loopexit, %entry44  ; Killer store45  store i64 0, ptr %gep, align 446  ret void47}