1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
; RUN: opt -S -passes=gvn < %s | FileCheck %s
; Make sure deduplicated phi nodes are removed from the VN map.
define i64 @f2(ptr %arg) {
; CHECK-LABEL: define i64 @f2(
; CHECK-SAME: ptr [[ARG:%.*]]) {
; CHECK-NEXT: BB:
; CHECK-NEXT: store i1 false, ptr [[ARG]], align 1
; CHECK-NEXT: br label [[BB2D:%.*]]
; CHECK: BB2a:
; CHECK-NEXT: br label [[BB2B:%.*]]
; CHECK: BB2b:
; CHECK-NEXT: br label [[BB2C:%.*]]
; CHECK: BB2c:
; CHECK-NEXT: [[AZ2:%.*]] = phi i1 [ true, [[BB2B]] ], [ [[AZ:%.*]], [[BB2D]] ]
; CHECK-NEXT: [[DOTPHI_TRANS_INSERT:%.*]] = sext i1 [[AZ2]] to i64
; CHECK-NEXT: [[GEP2_PHI_TRANS_INSERT:%.*]] = getelementptr i1, ptr [[ARG]], i64 [[DOTPHI_TRANS_INSERT]]
; CHECK-NEXT: [[L93_PRE:%.*]] = load i1, ptr [[GEP2_PHI_TRANS_INSERT]], align 1
; CHECK-NEXT: br label [[BB2D]]
; CHECK: BB2d:
; CHECK-NEXT: [[AZ]] = phi i1 [ [[AZ2]], [[BB2C]] ], [ false, [[BB:%.*]] ]
; CHECK-NEXT: [[L93:%.*]] = phi i1 [ [[L93_PRE]], [[BB2C]] ], [ false, [[BB]] ]
; CHECK-NEXT: [[TMP0:%.*]] = sext i1 [[AZ]] to i64
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i1, ptr [[ARG]], i64 [[TMP0]]
; CHECK-NEXT: store i1 [[AZ]], ptr [[ARG]], align 2
; CHECK-NEXT: br i1 [[L93]], label [[BB2C]], label [[BB1E:%.*]]
; CHECK: BB1e:
; CHECK-NEXT: br i1 [[AZ]], label [[BB2F:%.*]], label [[BB4:%.*]]
; CHECK: BB2f:
; CHECK-NEXT: store i1 true, ptr [[ARG]], align 2
; CHECK-NEXT: br label [[BB2B]]
; CHECK: BB4:
; CHECK-NEXT: br label [[BB4]]
;
BB:
store i1 false, ptr %arg, align 1
br label %BB2d
BB2a: ; No predecessors!
br label %BB2b
BB2b: ; preds = %BB2f, %BB2a
br label %BB2c
BB2c: ; preds = %BB2d, %BB2b
%0 = phi i1 [ true, %BB2b ], [ %1, %BB2d ]
br label %BB2d
BB2d: ; preds = %BB2c, %BB
%1 = phi i1 [ %0, %BB2c ], [ false, %BB ]
%2 = sext i1 %1 to i64
%gep2 = getelementptr i1, ptr %arg, i64 %2
%L93 = load i1, ptr %gep2, align 1
%Az = load i1, ptr %arg, align 2
store i1 %1, ptr %arg, align 2
br i1 %L93, label %BB2c, label %BB1e
BB1e: ; preds = %BB2d
br i1 %Az, label %BB2f, label %BB4
BB2f: ; preds = %BB1e
store i1 true, ptr %arg, align 2
br label %BB2b
BB4: ; preds = %BB1e, %BB4
br label %BB4
; uselistorder directives
uselistorder label %BB4, { 1, 0 }
}
; Make sure deduplicated phi nodes are removed from the VN map. Make
; sure there is no assert on attempt to use ConstantData use lists.
define i64 @f_null() {
; CHECK-LABEL: define i64 @f_null() {
; CHECK-NEXT: BB:
; CHECK-NEXT: store i1 false, ptr null, align 1
; CHECK-NEXT: br label [[BB2D:%.*]]
; CHECK: BB2a:
; CHECK-NEXT: br label [[BB2B:%.*]]
; CHECK: BB2b:
; CHECK-NEXT: br label [[BB2C:%.*]]
; CHECK: BB2c:
; CHECK-NEXT: [[AZ2:%.*]] = phi i1 [ true, [[BB2B]] ], [ [[AZ:%.*]], [[BB2D]] ]
; CHECK-NEXT: [[DOTPHI_TRANS_INSERT:%.*]] = sext i1 [[AZ2]] to i64
; CHECK-NEXT: [[GEP2_PHI_TRANS_INSERT:%.*]] = getelementptr i1, ptr null, i64 [[DOTPHI_TRANS_INSERT]]
; CHECK-NEXT: [[L93_PRE:%.*]] = load i1, ptr [[GEP2_PHI_TRANS_INSERT]], align 1
; CHECK-NEXT: br label [[BB2D]]
; CHECK: BB2d:
; CHECK-NEXT: [[AZ]] = phi i1 [ [[AZ2]], [[BB2C]] ], [ false, [[BB:%.*]] ]
; CHECK-NEXT: [[L93:%.*]] = phi i1 [ [[L93_PRE]], [[BB2C]] ], [ false, [[BB]] ]
; CHECK-NEXT: [[TMP0:%.*]] = sext i1 [[AZ]] to i64
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i1, ptr null, i64 [[TMP0]]
; CHECK-NEXT: store i1 [[AZ]], ptr null, align 2
; CHECK-NEXT: br i1 [[L93]], label [[BB2C]], label [[BB1E:%.*]]
; CHECK: BB1e:
; CHECK-NEXT: br i1 [[AZ]], label [[BB2F:%.*]], label [[BB4:%.*]]
; CHECK: BB2f:
; CHECK-NEXT: store i1 true, ptr null, align 2
; CHECK-NEXT: br label [[BB2B]]
; CHECK: BB4:
; CHECK-NEXT: br label [[BB4]]
;
BB:
store i1 false, ptr null, align 1
br label %BB2d
BB2a: ; No predecessors!
br label %BB2b
BB2b: ; preds = %BB2f, %BB2a
br label %BB2c
BB2c: ; preds = %BB2d, %BB2b
%0 = phi i1 [ true, %BB2b ], [ %1, %BB2d ]
br label %BB2d
BB2d: ; preds = %BB2c, %BB
%1 = phi i1 [ %0, %BB2c ], [ false, %BB ]
%2 = sext i1 %1 to i64
%gep2 = getelementptr i1, ptr null, i64 %2
%L93 = load i1, ptr %gep2, align 1
%Az = load i1, ptr null, align 2
store i1 %1, ptr null, align 2
br i1 %L93, label %BB2c, label %BB1e
BB1e: ; preds = %BB2d
br i1 %Az, label %BB2f, label %BB4
BB2f: ; preds = %BB1e
store i1 true, ptr null, align 2
br label %BB2b
BB4: ; preds = %BB1e, %BB4
br label %BB4
; uselistorder directives
uselistorder label %BB4, { 1, 0 }
}
|