blob: 22503710463b523fbee957b927acfebdb2594daa [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt < %s -passes='logical-sroa' -S | FileCheck %s --check-prefixes=CHECK
; This case is not optimized for now, but we should (see #193749).
define i32 @test_select_basic(i1 %cond) {
; CHECK-LABEL: define i32 @test_select_basic(
; CHECK-SAME: i1 [[COND:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[TMP:%.*]] = call elementtype({ i32, i32 }) ptr @llvm.structured.alloca.p0()
; CHECK-NEXT: [[PTR0:%.*]] = call ptr (ptr, ...) @llvm.structured.gep.p0(ptr elementtype({ i32, i32 }) [[TMP]], i32 0)
; CHECK-NEXT: [[PTR1:%.*]] = call ptr (ptr, ...) @llvm.structured.gep.p0(ptr elementtype({ i32, i32 }) [[TMP]], i32 1)
; CHECK-NEXT: store i32 0, ptr [[PTR0]], align 4
; CHECK-NEXT: store i32 1, ptr [[PTR1]], align 4
; CHECK-NEXT: [[PTR:%.*]] = select i1 [[COND]], ptr [[PTR0]], ptr [[PTR1]]
; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[PTR]], align 4
; CHECK-NEXT: ret i32 [[A]]
;
entry:
%tmp = call elementtype({ i32, i32 }) ptr @llvm.structured.alloca.p0()
%ptr0 = call ptr (ptr, ...) @llvm.structured.gep.p0(ptr elementtype({ i32, i32 }) %tmp, i32 0)
%ptr1 = call ptr (ptr, ...) @llvm.structured.gep.p0(ptr elementtype({ i32, i32 }) %tmp, i32 1)
store i32 0, ptr %ptr0
store i32 1, ptr %ptr1
%ptr = select i1 %cond, ptr %ptr0, ptr %ptr1
%a = load i32, ptr %ptr
ret i32 %a
}