llvm/llvm/test/Transforms/SROA/phi-speculate-different-load-types.ll

; 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: {{.*}}