|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 |
1 | 2 | ; RUN: opt -passes='default<O0>,mergefunc' -S -mergefunc-preserve-debug-info < %s | FileCheck %s --check-prefix=OPTIMIZATION_LEVEL_0
|
2 | 3 | ; RUN: opt -passes='default<O2>,mergefunc' -S -mergefunc-preserve-debug-info < %s | FileCheck %s --check-prefix=OPTIMIZATION_LEVEL_2
|
3 | 4 |
|
|
43 | 44 |
|
44 | 45 | ; Function Attrs: nounwind uwtable
|
45 | 46 | define i32 @maxA(i32 %x, i32 %y) !dbg !6 {
|
| 47 | +; OPTIMIZATION_LEVEL_0-LABEL: define i32 @maxA |
| 48 | +; OPTIMIZATION_LEVEL_0-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) !dbg [[DBG6:![0-9]+]] { |
| 49 | +; OPTIMIZATION_LEVEL_0-NEXT: entry: |
| 50 | +; OPTIMIZATION_LEVEL_0-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4 |
| 51 | +; OPTIMIZATION_LEVEL_0-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4 |
| 52 | +; OPTIMIZATION_LEVEL_0-NEXT: [[I:%.*]] = alloca i32, align 4 |
| 53 | +; OPTIMIZATION_LEVEL_0-NEXT: [[M:%.*]] = alloca i32, align 4 |
| 54 | +; OPTIMIZATION_LEVEL_0-NEXT: [[J:%.*]] = alloca i32, align 4 |
| 55 | +; OPTIMIZATION_LEVEL_0-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4 |
| 56 | +; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr [[X_ADDR]], metadata [[META11:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12:![0-9]+]] |
| 57 | +; OPTIMIZATION_LEVEL_0-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4 |
| 58 | +; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr [[Y_ADDR]], metadata [[META13:![0-9]+]], metadata !DIExpression()), !dbg [[DBG14:![0-9]+]] |
| 59 | +; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr [[I]], metadata [[META15:![0-9]+]], metadata !DIExpression()), !dbg [[DBG16:![0-9]+]] |
| 60 | +; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr [[M]], metadata [[META17:![0-9]+]], metadata !DIExpression()), !dbg [[DBG18:![0-9]+]] |
| 61 | +; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr [[J]], metadata [[META19:![0-9]+]], metadata !DIExpression()), !dbg [[DBG20:![0-9]+]] |
| 62 | +; OPTIMIZATION_LEVEL_0-NEXT: [[TMP0:%.*]] = load i32, ptr [[X_ADDR]], align 4, !dbg [[DBG21:![0-9]+]] |
| 63 | +; OPTIMIZATION_LEVEL_0-NEXT: [[TMP1:%.*]] = load i32, ptr [[Y_ADDR]], align 4, !dbg [[DBG23:![0-9]+]] |
| 64 | +; OPTIMIZATION_LEVEL_0-NEXT: [[CMP:%.*]] = icmp sgt i32 [[TMP0]], [[TMP1]], !dbg [[DBG24:![0-9]+]] |
| 65 | +; OPTIMIZATION_LEVEL_0-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]], !dbg [[DBG25:![0-9]+]] |
| 66 | +; OPTIMIZATION_LEVEL_0: if.then: |
| 67 | +; OPTIMIZATION_LEVEL_0-NEXT: [[TMP2:%.*]] = load i32, ptr [[X_ADDR]], align 4, !dbg [[DBG26:![0-9]+]] |
| 68 | +; OPTIMIZATION_LEVEL_0-NEXT: store i32 [[TMP2]], ptr [[M]], align 4, !dbg [[DBG27:![0-9]+]] |
| 69 | +; OPTIMIZATION_LEVEL_0-NEXT: br label [[IF_END:%.*]], !dbg [[DBG28:![0-9]+]] |
| 70 | +; OPTIMIZATION_LEVEL_0: if.else: |
| 71 | +; OPTIMIZATION_LEVEL_0-NEXT: [[TMP3:%.*]] = load i32, ptr [[Y_ADDR]], align 4, !dbg [[DBG29:![0-9]+]] |
| 72 | +; OPTIMIZATION_LEVEL_0-NEXT: store i32 [[TMP3]], ptr [[M]], align 4, !dbg [[DBG30:![0-9]+]] |
| 73 | +; OPTIMIZATION_LEVEL_0-NEXT: br label [[IF_END]] |
| 74 | +; OPTIMIZATION_LEVEL_0: if.end: |
| 75 | +; OPTIMIZATION_LEVEL_0-NEXT: [[TMP4:%.*]] = load i32, ptr [[M]], align 4, !dbg [[DBG31:![0-9]+]] |
| 76 | +; OPTIMIZATION_LEVEL_0-NEXT: ret i32 [[TMP4]], !dbg [[DBG32:![0-9]+]] |
| 77 | +; |
| 78 | +; OPTIMIZATION_LEVEL_2-LABEL: define i32 @maxA |
| 79 | +; OPTIMIZATION_LEVEL_2-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] !dbg [[DBG6:![0-9]+]] { |
| 80 | +; OPTIMIZATION_LEVEL_2-NEXT: entry: |
| 81 | +; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.value(metadata i32 [[X]], metadata [[META11:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12:![0-9]+]] |
| 82 | +; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.value(metadata i32 [[Y]], metadata [[META13:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12]] |
| 83 | +; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.declare(metadata ptr undef, metadata [[META14:![0-9]+]], metadata !DIExpression()), !dbg [[DBG15:![0-9]+]] |
| 84 | +; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.declare(metadata ptr undef, metadata [[META16:![0-9]+]], metadata !DIExpression()), !dbg [[DBG17:![0-9]+]] |
| 85 | +; OPTIMIZATION_LEVEL_2-NEXT: [[X_Y:%.*]] = tail call i32 @llvm.smax.i32(i32 [[X]], i32 [[Y]]) |
| 86 | +; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.value(metadata i32 [[X_Y]], metadata [[META18:![0-9]+]], metadata !DIExpression()), !dbg [[DBG12]] |
| 87 | +; OPTIMIZATION_LEVEL_2-NEXT: ret i32 [[X_Y]], !dbg [[DBG19:![0-9]+]] |
| 88 | +; |
46 | 89 | entry:
|
47 | 90 | %x.addr = alloca i32, align 4
|
48 | 91 | %y.addr = alloca i32, align 4
|
@@ -81,26 +124,27 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
|
81 | 124 |
|
82 | 125 | ; Function Attrs: nounwind uwtable
|
83 | 126 | define i32 @maxB(i32 %x, i32 %y) !dbg !34 {
|
| 127 | +; OPTIMIZATION_LEVEL_0-LABEL: define i32 @maxB |
| 128 | +; OPTIMIZATION_LEVEL_0-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) !dbg [[DBG33:![0-9]+]] { |
| 129 | +; OPTIMIZATION_LEVEL_0-NEXT: entry: |
| 130 | +; OPTIMIZATION_LEVEL_0-NEXT: [[X_ADDR:%.*]] = alloca i32, align 4 |
| 131 | +; OPTIMIZATION_LEVEL_0-NEXT: [[Y_ADDR:%.*]] = alloca i32, align 4 |
| 132 | +; OPTIMIZATION_LEVEL_0-NEXT: store i32 [[X]], ptr [[X_ADDR]], align 4 |
| 133 | +; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr [[X_ADDR]], metadata [[META34:![0-9]+]], metadata !DIExpression()), !dbg [[DBG35:![0-9]+]] |
| 134 | +; OPTIMIZATION_LEVEL_0-NEXT: store i32 [[Y]], ptr [[Y_ADDR]], align 4 |
| 135 | +; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr [[Y_ADDR]], metadata [[META36:![0-9]+]], metadata !DIExpression()), !dbg [[DBG37:![0-9]+]] |
| 136 | +; OPTIMIZATION_LEVEL_0-NEXT: [[TMP0:%.*]] = tail call i32 @maxA(i32 [[X]], i32 [[Y]]), !dbg [[DBG38:![0-9]+]] |
| 137 | +; OPTIMIZATION_LEVEL_0-NEXT: ret i32 [[TMP0]], !dbg [[DBG38]] |
| 138 | +; |
| 139 | +; OPTIMIZATION_LEVEL_2-LABEL: define i32 @maxB |
| 140 | +; OPTIMIZATION_LEVEL_2-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]]) local_unnamed_addr #[[ATTR0]] !dbg [[DBG20:![0-9]+]] { |
| 141 | +; OPTIMIZATION_LEVEL_2-NEXT: entry: |
| 142 | +; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.value(metadata i32 [[X]], metadata [[META21:![0-9]+]], metadata !DIExpression()), !dbg [[DBG22:![0-9]+]] |
| 143 | +; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.value(metadata i32 [[Y]], metadata [[META23:![0-9]+]], metadata !DIExpression()), !dbg [[DBG22]] |
| 144 | +; OPTIMIZATION_LEVEL_2-NEXT: [[TMP0:%.*]] = tail call i32 @maxA(i32 [[X]], i32 [[Y]]) #[[ATTR0]], !dbg [[DBG24:![0-9]+]] |
| 145 | +; OPTIMIZATION_LEVEL_2-NEXT: ret i32 [[TMP0]], !dbg [[DBG24]] |
| 146 | +; |
84 | 147 |
|
85 |
| -; OPTIMIZATION_LEVEL_0: define i32 @maxB(i32 %x, i32 %y) |
86 |
| -; OPTIMIZATION_LEVEL_0-NEXT: entry: |
87 |
| -; OPTIMIZATION_LEVEL_0-NEXT: %x.addr = alloca i32, align 4 |
88 |
| -; OPTIMIZATION_LEVEL_0-NEXT: %y.addr = alloca i32, align 4 |
89 |
| -; OPTIMIZATION_LEVEL_0-NEXT: store i32 %x, ptr %x.addr, align 4 |
90 |
| -; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr %x.addr, metadata !{{[0-9]+}}, metadata !DIExpression()), !dbg !{{[0-9]+}} |
91 |
| -; OPTIMIZATION_LEVEL_0-NEXT: store i32 %y, ptr %y.addr, align 4 |
92 |
| -; OPTIMIZATION_LEVEL_0-NEXT: call void @llvm.dbg.declare(metadata ptr %y.addr, metadata !{{[0-9]+}}, metadata !DIExpression()), !dbg !{{[0-9]+}} |
93 |
| -; OPTIMIZATION_LEVEL_0-NEXT: %0 = tail call i32 @maxA(i32 %x, i32 %y), !dbg !{{[0-9]+}} |
94 |
| -; OPTIMIZATION_LEVEL_0-NEXT: ret i32 %0, !dbg !{{[0-9]+}} |
95 |
| -; OPTIMIZATION_LEVEL_0-NEXT: } |
96 |
| - |
97 |
| -; OPTIMIZATION_LEVEL_2: define i32 @maxB(i32 %x, i32 %y) |
98 |
| -; OPTIMIZATION_LEVEL_2-NEXT: entry: |
99 |
| -; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.value(metadata i32 %x, metadata !{{[0-9]+}}, metadata !DIExpression()), !dbg !{{[0-9]+}} |
100 |
| -; OPTIMIZATION_LEVEL_2-NEXT: call void @llvm.dbg.value(metadata i32 %y, metadata !{{[0-9]+}}, metadata !DIExpression()), !dbg !{{[0-9]+}} |
101 |
| -; OPTIMIZATION_LEVEL_2-NEXT: %0 = tail call i32 @maxA(i32 %x, i32 %y) #{{[0-9]+}}, !dbg !{{[0-9]+}} |
102 |
| -; OPTIMIZATION_LEVEL_2-NEXT: ret i32 %0, !dbg !{{[0-9]+}} |
103 |
| -; OPTIMIZATION_LEVEL_2-NEXT: } |
104 | 148 |
|
105 | 149 | entry:
|
106 | 150 | %x.addr = alloca i32, align 4
|
@@ -137,18 +181,19 @@ if.end: ; preds = %if.else, %if.then
|
137 | 181 |
|
138 | 182 | ; Function Attrs: nounwind uwtable
|
139 | 183 | define void @f() !dbg !57 {
|
| 184 | +; OPTIMIZATION_LEVEL_0-LABEL: define void @f |
| 185 | +; OPTIMIZATION_LEVEL_0-SAME: () !dbg [[DBG39:![0-9]+]] { |
| 186 | +; OPTIMIZATION_LEVEL_0-NEXT: entry: |
| 187 | +; OPTIMIZATION_LEVEL_0-NEXT: [[CALL:%.*]] = call i32 @maxA(i32 3, i32 4), !dbg [[DBG42:![0-9]+]] |
| 188 | +; OPTIMIZATION_LEVEL_0-NEXT: [[CALL1:%.*]] = call i32 @maxB(i32 1, i32 9), !dbg [[DBG43:![0-9]+]] |
| 189 | +; OPTIMIZATION_LEVEL_0-NEXT: ret void, !dbg [[DBG44:![0-9]+]] |
| 190 | +; |
| 191 | +; OPTIMIZATION_LEVEL_2-LABEL: define void @f |
| 192 | +; OPTIMIZATION_LEVEL_2-SAME: () local_unnamed_addr #[[ATTR2:[0-9]+]] !dbg [[DBG25:![0-9]+]] { |
| 193 | +; OPTIMIZATION_LEVEL_2-NEXT: entry: |
| 194 | +; OPTIMIZATION_LEVEL_2-NEXT: ret void, !dbg [[DBG28:![0-9]+]] |
| 195 | +; |
140 | 196 | entry:
|
141 |
| - |
142 |
| -; OPTIMIZATION_LEVEL_0: define void @f() |
143 |
| -; OPTIMIZATION_LEVEL_0-NEXT: entry: |
144 |
| -; OPTIMIZATION_LEVEL_0-NEXT: %call = call i32 @maxA(i32 3, i32 4), !dbg !{{[0-9]+}} |
145 |
| -; OPTIMIZATION_LEVEL_0-NEXT: %call1 = call i32 @maxB(i32 1, i32 9), !dbg !{{[0-9]+}} |
146 |
| -; OPTIMIZATION_LEVEL_0-NEXT: ret void, !dbg !{{[0-9]+}} |
147 |
| - |
148 |
| -; OPTIMIZATION_LEVEL_2: define void @f() |
149 |
| -; OPTIMIZATION_LEVEL_2-NEXT: entry: |
150 |
| -; OPTIMIZATION_LEVEL_2-NEXT: ret void, !dbg !{{[0-9]+}} |
151 |
| - |
152 | 197 | %call = call i32 @maxA(i32 3, i32 4), !dbg !60
|
153 | 198 | %call1 = call i32 @maxB(i32 1, i32 9), !dbg !61
|
154 | 199 | ret void, !dbg !62
|
|
0 commit comments