xref: /llvm-project/llvm/test/Transforms/GVNHoist/int_sideeffect.ll (revision 0676acb6fd8d5e22fde16e6ec977ceac08427ab0)
1; RUN: opt -S < %s -passes=gvn-hoist | FileCheck %s
2
3declare void @llvm.sideeffect()
4
5; GVN hoisting across a @llvm.sideeffect.
6
7; CHECK-LABEL: scalarsHoisting
8; CHECK: = fsub
9; CHECK: br i1 %cmp,
10; CHECK-NOT: fsub
11define float @scalarsHoisting(float %d, float %m, float %a, i1 %cmp) {
12entry:
13  br i1 %cmp, label %if.then, label %if.else
14
15if.then:
16  call void @llvm.sideeffect()
17  %sub0 = fsub float %m, %a
18  %mul = fmul float %sub0, %d
19  br label %if.end
20
21if.else:
22  %sub1 = fsub float %m, %a
23  %div = fdiv float %sub1, %d
24  br label %if.end
25
26if.end:
27  %phi = phi float [ %mul, %if.then ], [ %div, %if.else ]
28  ret float %phi
29}
30
31