Skip to content

Commit

Permalink
[NFC] Remove straight UB from SROA tests
Browse files Browse the repository at this point in the history
Including 'br undef', store/load to undef pointers.
Plus some cosmetics: select undef, insertvalue undef -> poison.

Recommit c1b6103 with fix.
  • Loading branch information
nunoplopes committed Jun 13, 2022
1 parent 6e93050 commit 5a13249
Show file tree
Hide file tree
Showing 17 changed files with 271 additions and 256 deletions.
5 changes: 2 additions & 3 deletions llvm/test/Transforms/SROA/address-spaces.ll
Expand Up @@ -52,8 +52,7 @@ define void @test_address_space_0_1(<2 x i64>* %a, i16 addrspace(1)* %b) {

%struct.struct_test_27.0.13 = type { i32, float, i64, i8, [4 x i32] }

; Function Attrs: nounwind
define void @copy_struct([5 x i64] %in.coerce) {
define void @copy_struct([5 x i64] %in.coerce, i8 addrspace(1)* align 4 %ptr) {
; CHECK-LABEL: @copy_struct(
; CHECK-NOT: memcpy
for.end:
Expand All @@ -62,7 +61,7 @@ for.end:
store [5 x i64] %in.coerce, [5 x i64]* %0, align 8
%scevgep9 = getelementptr %struct.struct_test_27.0.13, %struct.struct_test_27.0.13* %in, i32 0, i32 4, i32 0
%scevgep910 = bitcast i32* %scevgep9 to i8*
call void @llvm.memcpy.p1i8.p0i8.i32(i8 addrspace(1)* align 4 undef, i8* align 4 %scevgep910, i32 16, i1 false)
call void @llvm.memcpy.p1i8.p0i8.i32(i8 addrspace(1)* align 4 %ptr, i8* align 4 %scevgep910, i32 16, i1 false)
ret void
}

Expand Down
28 changes: 14 additions & 14 deletions llvm/test/Transforms/SROA/addrspacecast.ll
Expand Up @@ -256,10 +256,10 @@ define void @select_addrspacecast(i1 %a, i1 %b) {
; CHECK-NEXT: ret void
;
%c = alloca i64, align 8
%p.0.c = select i1 undef, i64* %c, i64* %c
%p.0.c = select i1 %a, i64* %c, i64* %c
%asc = addrspacecast i64* %p.0.c to i64 addrspace(1)*

%cond.in = select i1 undef, i64 addrspace(1)* %asc, i64 addrspace(1)* %asc
%cond.in = select i1 %b, i64 addrspace(1)* %asc, i64 addrspace(1)* %asc
%cond = load i64, i64 addrspace(1)* %cond.in, align 8
ret void
}
Expand All @@ -268,15 +268,15 @@ define void @select_addrspacecast_const_op(i1 %a, i1 %b) {
; CHECK-LABEL: @select_addrspacecast_const_op(
; CHECK-NEXT: [[C:%.*]] = alloca i64, align 8
; CHECK-NEXT: [[C_0_ASC_SROA_CAST:%.*]] = addrspacecast i64* [[C]] to i64 addrspace(1)*
; CHECK-NEXT: [[COND_IN:%.*]] = select i1 undef, i64 addrspace(1)* [[C_0_ASC_SROA_CAST]], i64 addrspace(1)* null
; CHECK-NEXT: [[COND_IN:%.*]] = select i1 [[B:%.*]], i64 addrspace(1)* [[C_0_ASC_SROA_CAST]], i64 addrspace(1)* null
; CHECK-NEXT: [[COND:%.*]] = load i64, i64 addrspace(1)* [[COND_IN]], align 8
; CHECK-NEXT: ret void
;
%c = alloca i64, align 8
%p.0.c = select i1 undef, i64* %c, i64* %c
%p.0.c = select i1 %a, i64* %c, i64* %c
%asc = addrspacecast i64* %p.0.c to i64 addrspace(1)*

%cond.in = select i1 undef, i64 addrspace(1)* %asc, i64 addrspace(1)* null
%cond.in = select i1 %b, i64 addrspace(1)* %asc, i64 addrspace(1)* null
%cond = load i64, i64 addrspace(1)* %cond.in, align 8
ret void
}
Expand All @@ -288,36 +288,36 @@ define void @select_addrspacecast_const_op(i1 %a, i1 %b) {
define void @select_addrspacecast_gv(i1 %a, i1 %b) {
; CHECK-LABEL: @select_addrspacecast_gv(
; CHECK-NEXT: [[COND_SROA_SPECULATE_LOAD_FALSE:%.*]] = load i64, i64 addrspace(1)* @gv, align 8
; CHECK-NEXT: [[COND_SROA_SPECULATED:%.*]] = select i1 undef, i64 undef, i64 [[COND_SROA_SPECULATE_LOAD_FALSE]]
; CHECK-NEXT: [[COND_SROA_SPECULATED:%.*]] = select i1 [[B:%.*]], i64 undef, i64 [[COND_SROA_SPECULATE_LOAD_FALSE]]
; CHECK-NEXT: ret void
;
%c = alloca i64, align 8
%p.0.c = select i1 undef, i64* %c, i64* %c
%p.0.c = select i1 %a, i64* %c, i64* %c
%asc = addrspacecast i64* %p.0.c to i64 addrspace(1)*

%cond.in = select i1 undef, i64 addrspace(1)* %asc, i64 addrspace(1)* @gv
%cond.in = select i1 %b, i64 addrspace(1)* %asc, i64 addrspace(1)* @gv
%cond = load i64, i64 addrspace(1)* %cond.in, align 8
ret void
}

define void @select_addrspacecast_gv_constexpr(i1 %a, i1 %b) {
; CHECK-LABEL: @select_addrspacecast_gv_constexpr(
; CHECK-NEXT: [[COND_SROA_SPECULATE_LOAD_FALSE:%.*]] = load i64, i64 addrspace(2)* addrspacecast (i64 addrspace(1)* @gv to i64 addrspace(2)*), align 8
; CHECK-NEXT: [[COND_SROA_SPECULATED:%.*]] = select i1 undef, i64 undef, i64 [[COND_SROA_SPECULATE_LOAD_FALSE]]
; CHECK-NEXT: [[COND_SROA_SPECULATED:%.*]] = select i1 [[B:%.*]], i64 undef, i64 [[COND_SROA_SPECULATE_LOAD_FALSE]]
; CHECK-NEXT: ret void
;
%c = alloca i64, align 8
%p.0.c = select i1 undef, i64* %c, i64* %c
%p.0.c = select i1 %a, i64* %c, i64* %c
%asc = addrspacecast i64* %p.0.c to i64 addrspace(2)*

%cond.in = select i1 undef, i64 addrspace(2)* %asc, i64 addrspace(2)* addrspacecast (i64 addrspace(1)* @gv to i64 addrspace(2)*)
%cond.in = select i1 %b, i64 addrspace(2)* %asc, i64 addrspace(2)* addrspacecast (i64 addrspace(1)* @gv to i64 addrspace(2)*)
%cond = load i64, i64 addrspace(2)* %cond.in, align 8
ret void
}

define i8 @select_addrspacecast_i8() {
define i8 @select_addrspacecast_i8(i1 %c) {
; CHECK-LABEL: @select_addrspacecast_i8(
; CHECK-NEXT: [[RET_SROA_SPECULATED:%.*]] = select i1 undef, i8 undef, i8 undef
; CHECK-NEXT: [[RET_SROA_SPECULATED:%.*]] = select i1 [[C:%.*]], i8 undef, i8 undef
; CHECK-NEXT: ret i8 [[RET_SROA_SPECULATED]]
;
%a = alloca i8
Expand All @@ -326,7 +326,7 @@ define i8 @select_addrspacecast_i8() {
%a.ptr = addrspacecast i8* %a to i8 addrspace(1)*
%b.ptr = addrspacecast i8* %b to i8 addrspace(1)*

%ptr = select i1 undef, i8 addrspace(1)* %a.ptr, i8 addrspace(1)* %b.ptr
%ptr = select i1 %c, i8 addrspace(1)* %a.ptr, i8 addrspace(1)* %b.ptr
%ret = load i8, i8 addrspace(1)* %ptr
ret i8 %ret
}
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/SROA/alloca-address-space.ll
Expand Up @@ -54,14 +54,14 @@ define void @test_address_space_0_1(<2 x i64> addrspace(2)* %a, i16 addrspace(1)

; CHECK-LABEL: @copy_struct(
; CHECK-NOT: memcpy
define void @copy_struct([5 x i64] %in.coerce) {
define void @copy_struct([5 x i64] %in.coerce, i8 addrspace(1)* align 4 %ptr) {
for.end:
%in = alloca %struct.struct_test_27.0.13, align 8, addrspace(2)
%0 = bitcast %struct.struct_test_27.0.13 addrspace(2)* %in to [5 x i64] addrspace(2)*
store [5 x i64] %in.coerce, [5 x i64] addrspace(2)* %0, align 8
%scevgep9 = getelementptr %struct.struct_test_27.0.13, %struct.struct_test_27.0.13 addrspace(2)* %in, i32 0, i32 4, i32 0
%scevgep910 = bitcast i32 addrspace(2)* %scevgep9 to i8 addrspace(2)*
call void @llvm.memcpy.p1i8.p2i8.i32(i8 addrspace(1)* align 4 undef, i8 addrspace(2)* align 4 %scevgep910, i32 16, i1 false)
call void @llvm.memcpy.p1i8.p2i8.i32(i8 addrspace(1)* align 4 %ptr, i8 addrspace(2)* align 4 %scevgep910, i32 16, i1 false)
ret void
}

Expand Down
5 changes: 2 additions & 3 deletions llvm/test/Transforms/SROA/assume.ll
@@ -1,7 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -passes=sroa -S | FileCheck %s

source_filename = "tmp.cpp"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

Expand All @@ -11,15 +10,15 @@ target triple = "x86_64-unknown-linux-gnu"
%class.ao = type { %class.ai }
%class.ai = type { i32, i32 }

define linkonce_odr dso_local void @_ZN2bg2baIiEC2ES_() unnamed_addr align 2 {
define void @_ZN2bg2baIiEC2ES_(i64 %v) {
; CHECK-LABEL: @_ZN2bg2baIiEC2ES_(
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "ignore"(%struct.bi* undef) ]
; CHECK-NEXT: ret void
;
entry:
%y = alloca i64, align 8
store i64 undef, i64* %y, align 8
store i64 %v, i64* %y, align 8
%0 = bitcast i64* %y to %struct.n.2*
%1 = bitcast %struct.n.2* %0 to %struct.bi*
call void @llvm.assume(i1 true) [ "nonnull"(%struct.bi* %1) ]
Expand Down

0 comments on commit 5a13249

Please sign in to comment.