Files
clang-p2996/llvm/test/Transforms/InstSimplify/simplify-nested-bitcast.ll
Nikita Popov 60a32157a5 [Tests] Remove unnecessary bitcasts from opaque pointer tests (NFC)
Previously left these behind due to the required instruction
renumbering, drop them now. This more accurately represents
opaque pointer input IR.

Also drop duplicate opaque pointer check lines in one SROA test.
2022-06-22 14:15:46 +02:00

52 lines
3.0 KiB
LLVM

; RUN: opt -always-inline -S %s | FileCheck %s
%0 = type { i64, i64, ptr addrspace(1), ptr addrspace(1) }
%__aaa_struct = type { { ptr, i32, i32, ptr, ptr addrspace(1) }, %0, [17 x i8], { ptr, i32, i32, ptr, ptr addrspace(1) }, %0, [18 x i8] }
%struct.__block_descriptor = type { i64, i64 }
%struct.__block_literal_generic = type { ptr, i32, i32, ptr, ptr addrspace(1) }
@__aaa_struct_ptr = external addrspace(1) global %__aaa_struct
@__aaa_const_init = constant %__aaa_struct { { ptr, i32, i32, ptr, ptr addrspace(1) } { ptr null, i32 1342177280, i32 0, ptr @bl0_block_invoke, ptr addrspace(1) getelementptr inbounds (%__aaa_struct, ptr addrspace(1) @__aaa_struct_ptr, i32 0, i32 1) }, %0 { i64 0, i64 32, ptr addrspace(1) getelementptr inbounds (%__aaa_struct, ptr addrspace(1) @__aaa_struct_ptr, i32 0, i32 2, i32 0), ptr addrspace(1) null }, [17 x i8] c"bl0_block_invoke\00", { ptr, i32, i32, ptr, ptr addrspace(1) } { ptr null, i32 1342177280, i32 0, ptr @__f1_block_invoke, ptr addrspace(1) getelementptr inbounds (%__aaa_struct, ptr addrspace(1) @__aaa_struct_ptr, i32 0, i32 4) }, %0 { i64 0, i64 32, ptr addrspace(1) getelementptr inbounds (%__aaa_struct, ptr addrspace(1) @__aaa_struct_ptr, i32 0, i32 5, i32 0), ptr addrspace(1) null }, [18 x i8] c"__f1_block_invoke\00" }
; Function Attrs: alwaysinline norecurse nounwind readonly
define i32 @bl0_block_invoke(ptr addrspace(4) nocapture readnone, ptr addrspace(1) nocapture readonly) #0 {
entry:
%2 = load i32, ptr addrspace(1) %1, align 4
%mul = shl nsw i32 %2, 1
ret i32 %mul
}
; Function Attrs: alwaysinline nounwind
define i32 @f0(ptr addrspace(1), ptr addrspace(4)) #1 {
entry:
%2 = getelementptr inbounds %struct.__block_literal_generic, ptr addrspace(4) %1, i64 0, i32 3
%3 = load ptr, ptr addrspace(4) %2, align 8
%call = tail call i32 %3(ptr addrspace(4) %1, ptr addrspace(1) %0) #2
ret i32 %call
}
; CHECK-LABEL: define void @f1
; CHECK: %1 = load ptr, ptr addrspace(4) getelementptr inbounds (i8, ptr addrspace(4) addrspacecast (ptr addrspace(1) @__aaa_struct_ptr to ptr addrspace(4)), i64 16), align 8
; Function Attrs: alwaysinline nounwind
define void @f1(ptr addrspace(1)) #1 {
entry:
%call = tail call i32 @f0(ptr addrspace(1) %0, ptr addrspace(4) addrspacecast (ptr addrspace(1) @__aaa_struct_ptr to ptr addrspace(4))) #3
store i32 %call, ptr addrspace(1) %0, align 4
%call1 = tail call i32 @f0(ptr addrspace(1) %0, ptr addrspace(4) addrspacecast (ptr addrspace(1) getelementptr inbounds (%__aaa_struct, ptr addrspace(1) @__aaa_struct_ptr, i32 0, i32 3) to ptr addrspace(4))) #3
store i32 %call1, ptr addrspace(1) %0, align 4
ret void
}
; Function Attrs: alwaysinline norecurse nounwind readonly
define i32 @__f1_block_invoke(ptr addrspace(4) nocapture readnone, ptr addrspace(1) nocapture readonly) #0 {
entry:
%2 = load i32, ptr addrspace(1) %1, align 4
%add = add nsw i32 %2, 1
ret i32 %add
}
attributes #0 = { alwaysinline norecurse nounwind readonly }
attributes #1 = { alwaysinline nounwind }
attributes #2 = { nobuiltin nounwind }
attributes #3 = { nobuiltin }