blob: e8143241d23393002943ff3fecb6e51cb2e6ce46 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt < %s -passes=infer-alignment -S | FileCheck %s
; Propagates alignment information across blocks
; entry -> if.then: the original alignment in %load2 is better.
; entry -> if.else: the alignment in %load3 is improved.
; if.then -> if.else: the edge doesn't dominate if.else.
define void @propagate_across_blocks(ptr %a, i1 %cond) {
; CHECK-LABEL: define void @propagate_across_blocks(
; CHECK-SAME: ptr [[A:%.*]], i1 [[COND:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[LOAD1:%.*]] = load i64, ptr [[A]], align 8
; CHECK-NEXT: br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
; CHECK: [[IF_THEN]]:
; CHECK-NEXT: [[LOAD2:%.*]] = load i64, ptr [[A]], align 16
; CHECK-NEXT: br label %[[IF_ELSE]]
; CHECK: [[IF_ELSE]]:
; CHECK-NEXT: [[LOAD3:%.*]] = load i64, ptr [[A]], align 8
; CHECK-NEXT: ret void
;
entry:
%load1 = load i64, ptr %a, align 8
br i1 %cond, label %if.then, label %if.else
if.then:
%load2 = load i64, ptr %a, align 16
br label %if.else
if.else:
%load3 = load i64, ptr %a, align 1
ret void
}