; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes='sroa<preserve-cfg>' < %s -S | FileCheck %s --check-prefixes=CHECK,CHECK-PRESERVE-CFG
; RUN: opt -passes='sroa<modify-cfg>' < %s -S | FileCheck %s --check-prefixes=CHECK,CHECK-MODIFY-CFG
define void @f(i1 %i) {
; CHECK-LABEL: @f(
; CHECK-NEXT: [[A1:%.*]] = alloca i64, align 8
; CHECK-NEXT: [[A2:%.*]] = alloca i64, align 8
; CHECK-NEXT: br i1 [[I:%.*]], label [[BB1:%.*]], label [[BB:%.*]]
; CHECK: bb:
; CHECK-NEXT: br label [[BB2:%.*]]
; CHECK: bb1:
; CHECK-NEXT: br label [[BB2]]
; CHECK: bb2:
; CHECK-NEXT: [[TMP3:%.*]] = phi ptr [ [[A1]], [[BB1]] ], [ [[A2]], [[BB]] ]
; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP3]], align 4
; CHECK-NEXT: [[TMP4:%.*]] = load i64, ptr [[TMP3]], align 4
; CHECK-NEXT: call void @use32(i32 [[TMP5]])
; CHECK-NEXT: call void @use64(i64 [[TMP4]])
; CHECK-NEXT: ret void
;
%a1 = alloca i64
%a2 = alloca i64
br i1 %i, label %bb1, label %bb
bb:
br label %bb2
bb1:
br label %bb2
bb2:
%tmp3 = phi ptr [ %a1, %bb1 ], [ %a2, %bb ]
%tmp5 = load i32, ptr %tmp3
%tmp4 = load i64, ptr %tmp3
call void @use32(i32 %tmp5)
call void @use64(i64 %tmp4)
ret void
}
declare void @use32(i32)
declare void @use64(i64)
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; CHECK-MODIFY-CFG: {{.*}}
; CHECK-PRESERVE-CFG: {{.*}}