; 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 }