Unverified Commit 25002b7a authored by Florian Hahn's avatar Florian Hahn
Browse files

[InstCombine] Add additional aligned allocation tests for #69474.

parent f93a697e
Loading
Loading
Loading
Loading
+42 −2
Original line number Diff line number Diff line
@@ -26,8 +26,8 @@ define i32 @dead_aligned_alloc(i32 %size, i32 %alignment, i8 %value) {
  ret i32 0
}

define i1 @aligned_alloc_only_pointe(i32 %size, i32 %alignment, i8 %value) {
; CHECK-LABEL: @aligned_alloc_only_pointe(
define i1 @aligned_alloc_pointer_only_used_by_cmp(i32 %size, i32 %alignment, i8 %value) {
; CHECK-LABEL: @aligned_alloc_pointer_only_used_by_cmp(
; CHECK-NEXT:    ret i1 true
;
  %aligned_allocation = tail call ptr @aligned_alloc(i32 %alignment, i32 %size)
@@ -35,9 +35,49 @@ define i1 @aligned_alloc_only_pointe(i32 %size, i32 %alignment, i8 %value) {
  ret i1 %cmp
}

define i1 @aligned_alloc_pointer_only_used_by_cmp_alignment_and_value_known_ok(i32 %size, i32 %alignment, i8 %value) {
; CHECK-LABEL: @aligned_alloc_pointer_only_used_by_cmp_alignment_and_value_known_ok(
; CHECK-NEXT:    ret i1 true
;
  %aligned_allocation = tail call ptr @aligned_alloc(i32 8, i32 32)
  %cmp = icmp ne ptr %aligned_allocation, null
  ret i1 %cmp
}

define i1 @aligned_alloc_pointer_only_used_by_cmp_alignment_no_power_of_2(i32 %size, i32 %alignment, i8 %value) {
; CHECK-LABEL: @aligned_alloc_pointer_only_used_by_cmp_alignment_no_power_of_2(
; CHECK-NEXT:    ret i1 true
;
  %aligned_allocation = tail call ptr @aligned_alloc(i32 3, i32 32)
  %cmp = icmp ne ptr %aligned_allocation, null
  ret i1 %cmp
}

define i1 @aligned_alloc_pointer_only_used_by_cmp_size_not_multiple_of_alignment(i32 %size, i32 %alignment, i8 %value) {
; CHECK-LABEL: @aligned_alloc_pointer_only_used_by_cmp_size_not_multiple_of_alignment(
; CHECK-NEXT:    ret i1 true
;
  %aligned_allocation = tail call ptr @aligned_alloc(i32 8, i32 31)
  %cmp = icmp ne ptr %aligned_allocation, null
  ret i1 %cmp
}

; This test uses a aligned allocation function different to @aligned_alloc,
; and should be treated as having @aligned_alloc's constraints on alignment
; and size operands.
define i1 @other_aligned_allocation_function(i32 %size, i32 %alignment, i8 %value) {
; CHECK-LABEL: @other_aligned_allocation_function(
; CHECK-NEXT:    ret i1 true
;
  %aligned_allocation = tail call ptr @other_aligned_alloc(i32 %alignment, i32 %size)
  %cmp = icmp ne ptr %aligned_allocation, null
  ret i1 %cmp
}

declare noalias ptr @calloc(i32, i32) nounwind allockind("alloc,zeroed") allocsize(0,1) "alloc-family"="malloc"
declare noalias ptr @malloc(i32) allockind("alloc,uninitialized") allocsize(0) "alloc-family"="malloc"
declare noalias ptr @aligned_alloc(i32, i32) allockind("alloc,uninitialized,aligned") allocsize(1) "alloc-family"="malloc"
declare noalias ptr @other_aligned_alloc(i32, i32) allockind("alloc,uninitialized,aligned") allocsize(1) "alloc-family"="malloc"
declare void @free(ptr) allockind("free") "alloc-family"="malloc"

define i1 @foo() {