Skip to content

Commit 25002b7

Browse files
committed
[InstCombine] Add additional aligned allocation tests for llvm#69474.
1 parent f93a697 commit 25002b7

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

llvm/test/Transforms/InstCombine/malloc-free.ll

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,58 @@ define i32 @dead_aligned_alloc(i32 %size, i32 %alignment, i8 %value) {
2626
ret i32 0
2727
}
2828

29-
define i1 @aligned_alloc_only_pointe(i32 %size, i32 %alignment, i8 %value) {
30-
; CHECK-LABEL: @aligned_alloc_only_pointe(
29+
define i1 @aligned_alloc_pointer_only_used_by_cmp(i32 %size, i32 %alignment, i8 %value) {
30+
; CHECK-LABEL: @aligned_alloc_pointer_only_used_by_cmp(
3131
; CHECK-NEXT: ret i1 true
3232
;
3333
%aligned_allocation = tail call ptr @aligned_alloc(i32 %alignment, i32 %size)
3434
%cmp = icmp ne ptr %aligned_allocation, null
3535
ret i1 %cmp
3636
}
3737

38+
define i1 @aligned_alloc_pointer_only_used_by_cmp_alignment_and_value_known_ok(i32 %size, i32 %alignment, i8 %value) {
39+
; CHECK-LABEL: @aligned_alloc_pointer_only_used_by_cmp_alignment_and_value_known_ok(
40+
; CHECK-NEXT: ret i1 true
41+
;
42+
%aligned_allocation = tail call ptr @aligned_alloc(i32 8, i32 32)
43+
%cmp = icmp ne ptr %aligned_allocation, null
44+
ret i1 %cmp
45+
}
46+
47+
define i1 @aligned_alloc_pointer_only_used_by_cmp_alignment_no_power_of_2(i32 %size, i32 %alignment, i8 %value) {
48+
; CHECK-LABEL: @aligned_alloc_pointer_only_used_by_cmp_alignment_no_power_of_2(
49+
; CHECK-NEXT: ret i1 true
50+
;
51+
%aligned_allocation = tail call ptr @aligned_alloc(i32 3, i32 32)
52+
%cmp = icmp ne ptr %aligned_allocation, null
53+
ret i1 %cmp
54+
}
55+
56+
define i1 @aligned_alloc_pointer_only_used_by_cmp_size_not_multiple_of_alignment(i32 %size, i32 %alignment, i8 %value) {
57+
; CHECK-LABEL: @aligned_alloc_pointer_only_used_by_cmp_size_not_multiple_of_alignment(
58+
; CHECK-NEXT: ret i1 true
59+
;
60+
%aligned_allocation = tail call ptr @aligned_alloc(i32 8, i32 31)
61+
%cmp = icmp ne ptr %aligned_allocation, null
62+
ret i1 %cmp
63+
}
64+
65+
; This test uses a aligned allocation function different to @aligned_alloc,
66+
; and should be treated as having @aligned_alloc's constraints on alignment
67+
; and size operands.
68+
define i1 @other_aligned_allocation_function(i32 %size, i32 %alignment, i8 %value) {
69+
; CHECK-LABEL: @other_aligned_allocation_function(
70+
; CHECK-NEXT: ret i1 true
71+
;
72+
%aligned_allocation = tail call ptr @other_aligned_alloc(i32 %alignment, i32 %size)
73+
%cmp = icmp ne ptr %aligned_allocation, null
74+
ret i1 %cmp
75+
}
76+
3877
declare noalias ptr @calloc(i32, i32) nounwind allockind("alloc,zeroed") allocsize(0,1) "alloc-family"="malloc"
3978
declare noalias ptr @malloc(i32) allockind("alloc,uninitialized") allocsize(0) "alloc-family"="malloc"
4079
declare noalias ptr @aligned_alloc(i32, i32) allockind("alloc,uninitialized,aligned") allocsize(1) "alloc-family"="malloc"
80+
declare noalias ptr @other_aligned_alloc(i32, i32) allockind("alloc,uninitialized,aligned") allocsize(1) "alloc-family"="malloc"
4181
declare void @free(ptr) allockind("free") "alloc-family"="malloc"
4282

4383
define i1 @foo() {

0 commit comments

Comments
 (0)