Skip to content

Commit 4826079

Browse files
authored
[NFC][ubsan] Add mixed filter test case (#100679)
Currently "random" overrides "hotness", we need to make them work together.
1 parent bd80655 commit 4826079

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed

llvm/test/Transforms/lower-builtin-allow-check.ll

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
; RUN: opt < %s -passes='function(lower-allow-check)' -lower-allow-check-random-rate=0 -S | FileCheck %s --check-prefixes=NONE
44
; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-percentile-cutoff-hot=990000 -S | FileCheck %s --check-prefixes=HOT99
55
; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-percentile-cutoff-hot=700000 -S | FileCheck %s --check-prefixes=HOT70
6+
; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-random-rate=0 -lower-allow-check-percentile-cutoff-hot=990000 -S | FileCheck %s --check-prefixes=NONE99
7+
; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-random-rate=1 -lower-allow-check-percentile-cutoff-hot=700000 -S | FileCheck %s --check-prefixes=ALL70
68

79
target triple = "x86_64-pc-linux-gnu"
810

@@ -61,6 +63,32 @@ define dso_local noundef i32 @simple(ptr noundef readonly %0) {
6163
; HOT70: 4:
6264
; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
6365
; HOT70-NEXT: ret i32 [[TMP5]]
66+
;
67+
; NONE99-LABEL: define dso_local noundef i32 @simple(
68+
; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) {
69+
; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
70+
; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
71+
; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
72+
; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
73+
; NONE99: 3:
74+
; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
75+
; NONE99-NEXT: unreachable
76+
; NONE99: 4:
77+
; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
78+
; NONE99-NEXT: ret i32 [[TMP5]]
79+
;
80+
; ALL70-LABEL: define dso_local noundef i32 @simple(
81+
; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) {
82+
; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
83+
; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
84+
; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
85+
; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
86+
; ALL70: 3:
87+
; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
88+
; ALL70-NEXT: unreachable
89+
; ALL70: 4:
90+
; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
91+
; ALL70-NEXT: ret i32 [[TMP5]]
6492
;
6593
%chk = icmp eq ptr %0, null
6694
%allow = call i1 @llvm.allow.ubsan.check(i8 22)
@@ -130,6 +158,32 @@ define dso_local noundef i32 @hot(ptr noundef readonly %0) !prof !36 {
130158
; HOT70: 4:
131159
; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
132160
; HOT70-NEXT: ret i32 [[TMP5]]
161+
;
162+
; NONE99-LABEL: define dso_local noundef i32 @hot(
163+
; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
164+
; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
165+
; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
166+
; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
167+
; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
168+
; NONE99: 3:
169+
; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
170+
; NONE99-NEXT: unreachable
171+
; NONE99: 4:
172+
; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
173+
; NONE99-NEXT: ret i32 [[TMP5]]
174+
;
175+
; ALL70-LABEL: define dso_local noundef i32 @hot(
176+
; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {
177+
; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
178+
; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
179+
; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
180+
; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
181+
; ALL70: 3:
182+
; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
183+
; ALL70-NEXT: unreachable
184+
; ALL70: 4:
185+
; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
186+
; ALL70-NEXT: ret i32 [[TMP5]]
133187
;
134188
%chk = icmp eq ptr %0, null
135189
%allow = call i1 @llvm.allow.ubsan.check(i8 22)
@@ -198,6 +252,32 @@ define dso_local noundef i32 @veryHot(ptr noundef readonly %0) !prof !39 {
198252
; HOT70: 4:
199253
; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
200254
; HOT70-NEXT: ret i32 [[TMP5]]
255+
;
256+
; NONE99-LABEL: define dso_local noundef i32 @veryHot(
257+
; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
258+
; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
259+
; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
260+
; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
261+
; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
262+
; NONE99: 3:
263+
; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
264+
; NONE99-NEXT: unreachable
265+
; NONE99: 4:
266+
; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
267+
; NONE99-NEXT: ret i32 [[TMP5]]
268+
;
269+
; ALL70-LABEL: define dso_local noundef i32 @veryHot(
270+
; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {
271+
; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null
272+
; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
273+
; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]
274+
; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]
275+
; ALL70: 3:
276+
; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
277+
; ALL70-NEXT: unreachable
278+
; ALL70: 4:
279+
; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4
280+
; ALL70-NEXT: ret i32 [[TMP5]]
201281
;
202282
%chk = icmp eq ptr %0, null
203283
%allow = call i1 @llvm.allow.ubsan.check(i8 22)
@@ -291,6 +371,44 @@ define dso_local noundef i32 @branchColdFnHot(i32 noundef %0, ptr noundef readon
291371
; HOT70: 9:
292372
; HOT70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
293373
; HOT70-NEXT: ret i32 [[TMP10]]
374+
;
375+
; NONE99-LABEL: define dso_local noundef i32 @branchColdFnHot(
376+
; NONE99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
377+
; NONE99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
378+
; NONE99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
379+
; NONE99: 4:
380+
; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
381+
; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
382+
; NONE99-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
383+
; NONE99-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
384+
; NONE99: 6:
385+
; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
386+
; NONE99-NEXT: unreachable
387+
; NONE99: 7:
388+
; NONE99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
389+
; NONE99-NEXT: br label [[TMP9]]
390+
; NONE99: 9:
391+
; NONE99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
392+
; NONE99-NEXT: ret i32 [[TMP10]]
393+
;
394+
; ALL70-LABEL: define dso_local noundef i32 @branchColdFnHot(
395+
; ALL70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {
396+
; ALL70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
397+
; ALL70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]
398+
; ALL70: 4:
399+
; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
400+
; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
401+
; ALL70-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
402+
; ALL70-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
403+
; ALL70: 6:
404+
; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
405+
; ALL70-NEXT: unreachable
406+
; ALL70: 7:
407+
; ALL70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
408+
; ALL70-NEXT: br label [[TMP9]]
409+
; ALL70: 9:
410+
; ALL70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
411+
; ALL70-NEXT: ret i32 [[TMP10]]
294412
;
295413
%3 = icmp eq i32 %0, 0
296414
br i1 %3, label %9, label %4, !prof !38
@@ -391,6 +509,44 @@ define dso_local noundef i32 @branchHotFnCold(i32 noundef %0, ptr noundef readon
391509
; HOT70: 9:
392510
; HOT70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
393511
; HOT70-NEXT: ret i32 [[TMP10]]
512+
;
513+
; NONE99-LABEL: define dso_local noundef i32 @branchHotFnCold(
514+
; NONE99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
515+
; NONE99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
516+
; NONE99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
517+
; NONE99: 4:
518+
; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
519+
; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true
520+
; NONE99-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
521+
; NONE99-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
522+
; NONE99: 6:
523+
; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)
524+
; NONE99-NEXT: unreachable
525+
; NONE99: 7:
526+
; NONE99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
527+
; NONE99-NEXT: br label [[TMP9]]
528+
; NONE99: 9:
529+
; NONE99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
530+
; NONE99-NEXT: ret i32 [[TMP10]]
531+
;
532+
; ALL70-LABEL: define dso_local noundef i32 @branchHotFnCold(
533+
; ALL70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {
534+
; ALL70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0
535+
; ALL70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]
536+
; ALL70: 4:
537+
; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null
538+
; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true
539+
; ALL70-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]
540+
; ALL70-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
541+
; ALL70: 6:
542+
; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)
543+
; ALL70-NEXT: unreachable
544+
; ALL70: 7:
545+
; ALL70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4
546+
; ALL70-NEXT: br label [[TMP9]]
547+
; ALL70: 9:
548+
; ALL70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]
549+
; ALL70-NEXT: ret i32 [[TMP10]]
394550
;
395551
%3 = icmp eq i32 %0, 0
396552
br i1 %3, label %9, label %4, !prof !37
@@ -460,3 +616,13 @@ define dso_local noundef i32 @branchHotFnCold(i32 noundef %0, ptr noundef readon
460616
; HOT70: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
461617
; HOT70: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
462618
;.
619+
; NONE99: [[PROF16]] = !{!"function_entry_count", i64 1000}
620+
; NONE99: [[PROF17]] = !{!"function_entry_count", i64 7000}
621+
; NONE99: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
622+
; NONE99: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
623+
;.
624+
; ALL70: [[PROF16]] = !{!"function_entry_count", i64 1000}
625+
; ALL70: [[PROF17]] = !{!"function_entry_count", i64 7000}
626+
; ALL70: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}
627+
; ALL70: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}
628+
;.

0 commit comments

Comments
 (0)