| ; RUN: opt -S -O2 -enable-gvn-hoist < %s | FileCheck %s |
| |
| ; Check that the inlined loads are hoisted. |
| ; CHECK-LABEL: define i32 @fun( |
| ; CHECK-LABEL: entry: |
| ; CHECK: load i32, i32* @A |
| ; CHECK: if.then: |
| |
| @A = external global i32 |
| @B = external global i32 |
| @C = external global i32 |
| |
| define i32 @loadA() { |
| %a = load i32, i32* @A |
| ret i32 %a |
| } |
| |
| define i32 @fun(i1 %c) { |
| entry: |
| br i1 %c, label %if.then, label %if.else |
| |
| if.then: |
| store i32 1, i32* @B |
| %call1 = call i32 @loadA() |
| store i32 2, i32* @C |
| br label %if.endif |
| |
| if.else: |
| store i32 2, i32* @C |
| %call2 = call i32 @loadA() |
| store i32 1, i32* @B |
| br label %if.endif |
| |
| if.endif: |
| %ret = phi i32 [ %call1, %if.then ], [ %call2, %if.else ] |
| ret i32 %ret |
| } |
| |