|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
2 | | -; RUN: opt < %s -passes=bounds-checking -S | FileCheck %s --check-prefixes=TR |
3 | | -; RUN: opt < %s -passes='bounds-checking<trap>' -S | FileCheck %s --check-prefixes=TR |
4 | | -; RUN: opt < %s -passes='bounds-checking<rt>' -S | FileCheck %s --check-prefixes=RT |
5 | | -; RUN: opt < %s -passes='bounds-checking<rt-abort>' -S | FileCheck %s --check-prefixes=RTABORT |
6 | | -; RUN: opt < %s -passes='bounds-checking<min-rt>' -S | FileCheck %s --check-prefixes=MINRT |
7 | | -; RUN: opt < %s -passes='bounds-checking<min-rt-abort>' -S | FileCheck %s --check-prefixes=MINRTABORT |
| 2 | +; RUN: opt < %s -passes=bounds-checking -S | FileCheck %s --check-prefixes=TR-NOMERGE |
| 3 | +; RUN: opt < %s -passes='bounds-checking<trap>' -S | FileCheck %s --check-prefixes=TR-NOMERGE |
| 4 | +; RUN: opt < %s -passes='bounds-checking<rt>' -S | FileCheck %s --check-prefixes=RT-NOMERGE |
| 5 | +; RUN: opt < %s -passes='bounds-checking<rt-abort>' -S | FileCheck %s --check-prefixes=RTABORT-NOMERGE |
| 6 | +; RUN: opt < %s -passes='bounds-checking<min-rt>' -S | FileCheck %s --check-prefixes=MINRT-NOMERGE |
| 7 | +; RUN: opt < %s -passes='bounds-checking<min-rt-abort>' -S | FileCheck %s --check-prefixes=MINRTABORT-NOMERGE |
8 | 8 | ; |
9 | | -; merge defaults to true |
10 | | -; RUN: opt < %s -passes='bounds-checking<merge=true>' -S | FileCheck %s --check-prefixes=TR |
11 | | -; RUN: opt < %s -passes='bounds-checking<trap;merge=true>' -S | FileCheck %s --check-prefixes=TR |
12 | | -; RUN: opt < %s -passes='bounds-checking<rt;merge=true>' -S | FileCheck %s --check-prefixes=RT |
13 | | -; RUN: opt < %s -passes='bounds-checking<rt-abort;merge=true>' -S | FileCheck %s --check-prefixes=RTABORT |
14 | | -; RUN: opt < %s -passes='bounds-checking<min-rt;merge=true>' -S | FileCheck %s --check-prefixes=MINRT |
15 | | -; RUN: opt < %s -passes='bounds-checking<min-rt-abort;merge=true>' -S | FileCheck %s --check-prefixes=MINRTABORT |
16 | | -; |
17 | | -; RUN: opt < %s -passes='bounds-checking<merge=false>' -S | FileCheck %s --check-prefixes=TR-NOMERGE |
18 | | -; RUN: opt < %s -passes='bounds-checking<trap;merge=false>' -S | FileCheck %s --check-prefixes=TR-NOMERGE |
19 | | -; RUN: opt < %s -passes='bounds-checking<rt;merge=false>' -S | FileCheck %s --check-prefixes=RT-NOMERGE |
20 | | -; RUN: opt < %s -passes='bounds-checking<rt-abort;merge=false>' -S | FileCheck %s --check-prefixes=RTABORT-NOMERGE |
21 | | -; RUN: opt < %s -passes='bounds-checking<min-rt;merge=false>' -S | FileCheck %s --check-prefixes=MINRT-NOMERGE |
22 | | -; RUN: opt < %s -passes='bounds-checking<min-rt-abort;merge=false>' -S | FileCheck %s --check-prefixes=MINRTABORT-NOMERGE |
| 9 | +; RUN: opt < %s -passes='bounds-checking<trap;merge>' -S | FileCheck %s --check-prefixes=TR |
| 10 | +; RUN: opt < %s -passes='bounds-checking<rt;merge>' -S | FileCheck %s --check-prefixes=RT |
23 | 11 |
|
24 | 12 | target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" |
25 | 13 |
|
@@ -56,54 +44,6 @@ define void @f1(i64 %x) nounwind { |
56 | 44 | ; RT-NEXT: call void @__ubsan_handle_local_out_of_bounds() #[[ATTR0]] |
57 | 45 | ; RT-NEXT: br label %[[BB7]] |
58 | 46 | ; |
59 | | -; RTABORT-LABEL: define void @f1( |
60 | | -; RTABORT-SAME: i64 [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
61 | | -; RTABORT-NEXT: [[TMP1:%.*]] = mul i64 16, [[X]] |
62 | | -; RTABORT-NEXT: [[TMP2:%.*]] = alloca i128, i64 [[X]], align 8 |
63 | | -; RTABORT-NEXT: [[TMP3:%.*]] = sub i64 [[TMP1]], 0 |
64 | | -; RTABORT-NEXT: [[TMP4:%.*]] = icmp ult i64 [[TMP3]], 16 |
65 | | -; RTABORT-NEXT: [[TMP5:%.*]] = or i1 false, [[TMP4]] |
66 | | -; RTABORT-NEXT: [[TMP6:%.*]] = or i1 false, [[TMP5]] |
67 | | -; RTABORT-NEXT: br i1 [[TMP6]], label %[[TRAP:.*]], label %[[BB7:.*]] |
68 | | -; RTABORT: [[BB7]]: |
69 | | -; RTABORT-NEXT: [[TMP8:%.*]] = load i128, ptr [[TMP2]], align 4 |
70 | | -; RTABORT-NEXT: ret void |
71 | | -; RTABORT: [[TRAP]]: |
72 | | -; RTABORT-NEXT: call void @__ubsan_handle_local_out_of_bounds_abort() #[[ATTR1:[0-9]+]] |
73 | | -; RTABORT-NEXT: unreachable |
74 | | -; |
75 | | -; MINRT-LABEL: define void @f1( |
76 | | -; MINRT-SAME: i64 [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
77 | | -; MINRT-NEXT: [[TMP1:%.*]] = mul i64 16, [[X]] |
78 | | -; MINRT-NEXT: [[TMP2:%.*]] = alloca i128, i64 [[X]], align 8 |
79 | | -; MINRT-NEXT: [[TMP3:%.*]] = sub i64 [[TMP1]], 0 |
80 | | -; MINRT-NEXT: [[TMP4:%.*]] = icmp ult i64 [[TMP3]], 16 |
81 | | -; MINRT-NEXT: [[TMP5:%.*]] = or i1 false, [[TMP4]] |
82 | | -; MINRT-NEXT: [[TMP6:%.*]] = or i1 false, [[TMP5]] |
83 | | -; MINRT-NEXT: br i1 [[TMP6]], label %[[TRAP:.*]], label %[[BB7:.*]] |
84 | | -; MINRT: [[BB7]]: |
85 | | -; MINRT-NEXT: [[TMP8:%.*]] = load i128, ptr [[TMP2]], align 4 |
86 | | -; MINRT-NEXT: ret void |
87 | | -; MINRT: [[TRAP]]: |
88 | | -; MINRT-NEXT: call void @__ubsan_handle_local_out_of_bounds_minimal() #[[ATTR0]] |
89 | | -; MINRT-NEXT: br label %[[BB7]] |
90 | | -; |
91 | | -; MINRTABORT-LABEL: define void @f1( |
92 | | -; MINRTABORT-SAME: i64 [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
93 | | -; MINRTABORT-NEXT: [[TMP1:%.*]] = mul i64 16, [[X]] |
94 | | -; MINRTABORT-NEXT: [[TMP2:%.*]] = alloca i128, i64 [[X]], align 8 |
95 | | -; MINRTABORT-NEXT: [[TMP3:%.*]] = sub i64 [[TMP1]], 0 |
96 | | -; MINRTABORT-NEXT: [[TMP4:%.*]] = icmp ult i64 [[TMP3]], 16 |
97 | | -; MINRTABORT-NEXT: [[TMP5:%.*]] = or i1 false, [[TMP4]] |
98 | | -; MINRTABORT-NEXT: [[TMP6:%.*]] = or i1 false, [[TMP5]] |
99 | | -; MINRTABORT-NEXT: br i1 [[TMP6]], label %[[TRAP:.*]], label %[[BB7:.*]] |
100 | | -; MINRTABORT: [[BB7]]: |
101 | | -; MINRTABORT-NEXT: [[TMP8:%.*]] = load i128, ptr [[TMP2]], align 4 |
102 | | -; MINRTABORT-NEXT: ret void |
103 | | -; MINRTABORT: [[TRAP]]: |
104 | | -; MINRTABORT-NEXT: call void @__ubsan_handle_local_out_of_bounds_minimal_abort() #[[ATTR1:[0-9]+]] |
105 | | -; MINRTABORT-NEXT: unreachable |
106 | | -; |
107 | 47 | ; TR-NOMERGE-LABEL: define void @f1( |
108 | 48 | ; TR-NOMERGE-SAME: i64 [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
109 | 49 | ; TR-NOMERGE-NEXT: [[TMP1:%.*]] = mul i64 16, [[X]] |
@@ -189,14 +129,11 @@ define void @f1(i64 %x) nounwind { |
189 | 129 | ret void |
190 | 130 | } |
191 | 131 |
|
192 | | -; TR: attributes #[[ATTR2]] = { noreturn nounwind } |
193 | | -; RT: attributes #[[ATTR0]] = { nounwind } |
194 | | -; RTABORT: attributes #[[ATTR1]] = { noreturn nounwind } |
195 | | -; MINRT: attributes #[[ATTR0]] = { nounwind } |
196 | | -; MINRTABORT: attributes #[[ATTR1]] = { noreturn nounwind } |
197 | | - |
198 | 132 | ; TR-NOMERGE: attributes #[[ATTR2]] = { nomerge noreturn nounwind } |
199 | 133 | ; RT-NOMERGE: attributes #[[ATTR1]] = { nomerge nounwind } |
200 | 134 | ; RTABORT-NOMERGE: attributes #[[ATTR2]] = { nomerge noreturn nounwind } |
201 | 135 | ; MINRT-NOMERGE: attributes #[[ATTR1]] = { nomerge nounwind } |
202 | 136 | ; MINRTABORT-NOMERGE: attributes #[[ATTR2]] = { nomerge noreturn nounwind } |
| 137 | +; |
| 138 | +; TR: attributes #[[ATTR2]] = { noreturn nounwind } |
| 139 | +; RT: attributes #[[ATTR0]] = { nounwind } |
0 commit comments