; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -passes=sink -S < %s | FileCheck %s ; Loads marked invariant can be sunk across critical edges define <4 x float> @invariant_load(ptr %in, i32 %s) { ; CHECK-LABEL: @invariant_load( ; CHECK-NEXT: main_body: ; CHECK-NEXT: [[C:%.*]] = icmp eq i32 [[S:%.*]], 0 ; CHECK-NEXT: br i1 [[C]], label [[BLOCK:%.*]], label [[END:%.*]] ; CHECK: block: ; CHECK-NEXT: [[Z:%.*]] = add i32 [[S]], 1 ; CHECK-NEXT: br label [[END]] ; CHECK: end: ; CHECK-NEXT: [[V:%.*]] = load <4 x float>, ptr [[IN:%.*]], align 16, !invariant.load !0 ; CHECK-NEXT: ret <4 x float> [[V]] ; main_body: %v = load <4 x float>, ptr %in, !invariant.load !0 %c = icmp eq i32 %s, 0 br i1 %c, label %block, label %end block: %z = add i32 %s, 1 br label %end end: ret <4 x float> %v } !0 = !{}