[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / NewGVN / pr31682.ll
bloba4b612e01956a0e1247a0d86d7fafd3143dbdff3
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -basic-aa -newgvn -S | FileCheck %s
3 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
5 %struct.foo = type { i32, i32, [2 x [4 x [6 x [6 x i16]]]] }
7 @global = external global %struct.foo*
9 define void @bar() {
10 ; CHECK-LABEL: @bar(
11 ; CHECK-NEXT:  bb:
12 ; CHECK-NEXT:    [[TMP:%.*]] = load %struct.foo*, %struct.foo** @global
13 ; CHECK-NEXT:    br label [[BB2:%.*]]
14 ; CHECK:       bb2:
15 ; CHECK-NEXT:    br i1 undef, label [[BB2]], label [[BB7:%.*]]
16 ; CHECK:       bb7:
17 ; CHECK-NEXT:    br label [[BB10:%.*]]
18 ; CHECK:       bb10:
19 ; CHECK-NEXT:    br label [[BB10]]
21 bb:
22   %tmp = load %struct.foo*, %struct.foo** @global
23   %tmp1 = getelementptr %struct.foo, %struct.foo* %tmp
24   br label %bb2
26 bb2:                                              ; preds = %bb2, %bb
27   %tmp3 = phi %struct.foo* [ undef, %bb ], [ %tmp6, %bb2 ]
28   %tmp4 = getelementptr %struct.foo, %struct.foo* %tmp3, i64 0, i32 1
29   %tmp5 = load i32, i32* %tmp4
30   %tmp6 = load %struct.foo*, %struct.foo** @global
31   br i1 undef, label %bb2, label %bb7
33 bb7:                                              ; preds = %bb2
34   %tmp8 = phi %struct.foo* [ %tmp6, %bb2 ]
35   %tmp9 = getelementptr %struct.foo, %struct.foo* %tmp8, i64 0, i32 1
36   br label %bb10
38 bb10:                                             ; preds = %bb10, %bb7
39   %tmp11 = load i32, i32* %tmp9
40   br label %bb10