|
51 | 51 | ; INTERESTING-LABEL: define {{.+}} @callsite_different_type_unused_0(
|
52 | 52 |
|
53 | 53 | ; RESULT-LABEL: define i64 @callsite_different_type_unused_0(ptr %arg) {
|
54 |
| -; RESULT-NEXT: %unused0 = call i64 @inst_to_return_has_different_type_but_call_result_unused(ptr %arg) |
| 54 | +; RESULT-NEXT: %unused0 = call range(i64 99, 1024) i64 @inst_to_return_has_different_type_but_call_result_unused(ptr %arg) |
55 | 55 | ; RESULT-NEXT: ret i64 %unused0
|
56 | 56 | define void @callsite_different_type_unused_0(ptr %arg) {
|
57 |
| - %unused0 = call i64 @inst_to_return_has_different_type_but_call_result_unused(ptr %arg) |
| 57 | + %unused0 = call range(i64 99, 1024) i64 @inst_to_return_has_different_type_but_call_result_unused(ptr %arg) |
58 | 58 | %unused1 = call i64 @inst_to_return_has_different_type_but_call_result_unused(ptr null)
|
59 | 59 | ret void
|
60 | 60 | }
|
@@ -122,3 +122,34 @@ define void @call_multiple_returns_wrong_return_type(ptr %arg, i1 %cond, i32 %ar
|
122 | 122 | %unused = call <2 x i32> @multiple_returns_wrong_return_type(ptr %arg, i1 %cond, i32 %arg2)
|
123 | 123 | ret void
|
124 | 124 | }
|
| 125 | + |
| 126 | +; INTERESTING-LABEL: @drop_incompatible_type_return_attrs( |
| 127 | + |
| 128 | +; RESULT-LABEL: define i32 @drop_incompatible_type_return_attrs(ptr %arg, float %arg1) { |
| 129 | +; RESULT-NEXT: %load = load i32, ptr %arg, align 4 |
| 130 | +; RESULT-NEXT: ret i32 %load |
| 131 | +define nofpclass(nan inf) float @drop_incompatible_type_return_attrs(ptr %arg, float %arg1) { |
| 132 | + %load = load i32, ptr %arg |
| 133 | + store i32 %load, ptr @gv |
| 134 | + ret float %arg1 |
| 135 | +} |
| 136 | + |
| 137 | +; INTERESTING-LABEL: @drop_incompatible_return_range( |
| 138 | +; RESULT-LABEL: define i32 @drop_incompatible_return_range(ptr %arg, i64 %arg1) { |
| 139 | +; RESULT-NEXT: %load = load i32, ptr %arg, align 4 |
| 140 | +; RESULT-NEXT: ret i32 %load |
| 141 | +define range(i64 8, 256) i64 @drop_incompatible_return_range(ptr %arg, i64 %arg1) { |
| 142 | + %load = load i32, ptr %arg |
| 143 | + store i32 %load, ptr @gv |
| 144 | + ret i64 %arg1 |
| 145 | +} |
| 146 | + |
| 147 | +; INTERESTING-LABEL: @preserve_compatible_return_range( |
| 148 | +; RESULT-LABEL: define range(i32 8, 256) i32 @preserve_compatible_return_range(ptr %arg, <2 x i32> %arg1) { |
| 149 | +; RESULT-NEXT: %load = load i32, ptr %arg, align 4 |
| 150 | +; RESULT-NEXT: ret i32 %load |
| 151 | +define range(i32 8, 256) <2 x i32> @preserve_compatible_return_range(ptr %arg, <2 x i32> %arg1) { |
| 152 | + %load = load i32, ptr %arg |
| 153 | + store i32 %load, ptr @gv |
| 154 | + ret <2 x i32> %arg1 |
| 155 | +} |
0 commit comments