|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
2 |
| -; RUN: opt < %s -simplifycfg -S | FileCheck %s |
| 2 | +; RUN: opt < %s -simplifycfg -S | FileCheck %s --check-prefixes=ALL,DEFAULT,FALLBACK0 |
| 3 | +; RUN: opt < %s -simplifycfg -phi-node-folding-threshold=2 -S | FileCheck %s --check-prefixes=ALL,DEFAULT,FALLBACK1 |
| 4 | +; RUN: opt < %s -simplifycfg -phi-node-folding-threshold=3 -S | FileCheck %s --check-prefixes=ALL,COSTLY |
3 | 5 |
|
4 | 6 | ; This is checking that the multiplication does overflow, with a leftover
|
5 | 7 | ; guard against division-by-zero that was needed before InstCombine
|
6 | 8 | ; produced llvm.umul.with.overflow.
|
7 | 9 |
|
8 | 10 | define i1 @will_overflow(i64 %size, i64 %nmemb) {
|
9 |
| -; CHECK-LABEL: @will_overflow( |
10 |
| -; CHECK-NEXT: entry: |
11 |
| -; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[SIZE:%.*]], 0 |
12 |
| -; CHECK-NEXT: br i1 [[CMP]], label [[LAND_END:%.*]], label [[LAND_RHS:%.*]] |
13 |
| -; CHECK: land.rhs: |
14 |
| -; CHECK-NEXT: [[UMUL:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[SIZE]], i64 [[NMEMB:%.*]]) |
15 |
| -; CHECK-NEXT: [[UMUL_OV:%.*]] = extractvalue { i64, i1 } [[UMUL]], 1 |
16 |
| -; CHECK-NEXT: [[UMUL_NOT_OV:%.*]] = xor i1 [[UMUL_OV]], true |
17 |
| -; CHECK-NEXT: br label [[LAND_END]] |
18 |
| -; CHECK: land.end: |
19 |
| -; CHECK-NEXT: [[TMP0:%.*]] = phi i1 [ true, [[ENTRY:%.*]] ], [ [[UMUL_NOT_OV]], [[LAND_RHS]] ] |
20 |
| -; CHECK-NEXT: ret i1 [[TMP0]] |
| 11 | +; ALL-LABEL: @will_overflow( |
| 12 | +; ALL-NEXT: entry: |
| 13 | +; ALL-NEXT: [[CMP:%.*]] = icmp eq i64 [[SIZE:%.*]], 0 |
| 14 | +; ALL-NEXT: br i1 [[CMP]], label [[LAND_END:%.*]], label [[LAND_RHS:%.*]] |
| 15 | +; ALL: land.rhs: |
| 16 | +; ALL-NEXT: [[UMUL:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[SIZE]], i64 [[NMEMB:%.*]]) |
| 17 | +; ALL-NEXT: [[UMUL_OV:%.*]] = extractvalue { i64, i1 } [[UMUL]], 1 |
| 18 | +; ALL-NEXT: [[UMUL_NOT_OV:%.*]] = xor i1 [[UMUL_OV]], true |
| 19 | +; ALL-NEXT: br label [[LAND_END]] |
| 20 | +; ALL: land.end: |
| 21 | +; ALL-NEXT: [[TMP0:%.*]] = phi i1 [ true, [[ENTRY:%.*]] ], [ [[UMUL_NOT_OV]], [[LAND_RHS]] ] |
| 22 | +; ALL-NEXT: ret i1 [[TMP0]] |
21 | 23 | ;
|
22 | 24 | entry:
|
23 | 25 | %cmp = icmp eq i64 %size, 0
|
|
0 commit comments