comparison llvm/test/Transforms/CodeGenPrepare/X86/select.ll @ 173:0572611fdcc8 llvm10 llvm12

reorgnization done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 11:55:54 +0900
parents 1d019706d866
children 1f2b6ac9f198
comparison
equal deleted inserted replaced
172:9fbae9c8bf63 173:0572611fdcc8
25 ; An 'fdiv' is expensive, so sink it rather than speculatively execute it. 25 ; An 'fdiv' is expensive, so sink it rather than speculatively execute it.
26 26
27 define float @fdiv_true_sink(float %a, float %b) { 27 define float @fdiv_true_sink(float %a, float %b) {
28 ; CHECK-LABEL: @fdiv_true_sink( 28 ; CHECK-LABEL: @fdiv_true_sink(
29 ; CHECK-NEXT: entry: 29 ; CHECK-NEXT: entry:
30 ; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 1.000000e+00 30 ; CHECK-NEXT: [[SEL_FR:%.*]] = freeze float [[A:%.*]]
31 ; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[SEL_FR]], 1.000000e+00
31 ; CHECK-NEXT: br i1 [[CMP]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_END:%.*]] 32 ; CHECK-NEXT: br i1 [[CMP]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_END:%.*]]
32 ; CHECK: select.true.sink: 33 ; CHECK: select.true.sink:
33 ; CHECK-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]] 34 ; CHECK-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]]
34 ; CHECK-NEXT: br label [[SELECT_END]] 35 ; CHECK-NEXT: br label [[SELECT_END]]
35 ; CHECK: select.end: 36 ; CHECK: select.end:
36 ; CHECK-NEXT: [[SEL:%.*]] = phi float [ [[DIV]], [[SELECT_TRUE_SINK]] ], [ 2.000000e+00, [[ENTRY:%.*]] ] 37 ; CHECK-NEXT: [[SEL:%.*]] = phi float [ [[DIV]], [[SELECT_TRUE_SINK]] ], [ 2.000000e+00, [[ENTRY:%.*]] ]
37 ; CHECK-NEXT: ret float [[SEL]] 38 ; CHECK-NEXT: ret float [[SEL]]
38 ; 39 ;
39 ; DEBUG-LABEL: @fdiv_true_sink( 40 ; DEBUG-LABEL: @fdiv_true_sink(
40 ; DEBUG-NEXT: entry: 41 ; DEBUG-NEXT: entry:
41 ; DEBUG-NEXT: [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 1.000000e+00 42 ; DEBUG-NEXT: [[SEL_FR:%.*]] = freeze float [[A:%.*]]
43 ; DEBUG-NEXT: [[CMP:%.*]] = fcmp ogt float [[SEL_FR]], 1.000000e+00, !dbg !24
42 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP]] 44 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP]]
43 ; DEBUG-NEXT: br i1 [[CMP]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_END:%.*]], !dbg 45 ; DEBUG-NEXT: br i1 [[CMP]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_END:%.*]], !dbg
44 ; DEBUG: select.true.sink: 46 ; DEBUG: select.true.sink:
45 ; DEBUG-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]] 47 ; DEBUG-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]]
46 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[DIV]] 48 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[DIV]]
58 } 60 }
59 61
60 define float @fdiv_false_sink(float %a, float %b) { 62 define float @fdiv_false_sink(float %a, float %b) {
61 ; CHECK-LABEL: @fdiv_false_sink( 63 ; CHECK-LABEL: @fdiv_false_sink(
62 ; CHECK-NEXT: entry: 64 ; CHECK-NEXT: entry:
63 ; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 3.000000e+00 65 ; CHECK-NEXT: [[SEL_FR:%.*]] = freeze float [[A:%.*]]
66 ; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[SEL_FR]], 3.000000e+00
64 ; CHECK-NEXT: br i1 [[CMP]], label [[SELECT_END:%.*]], label [[SELECT_FALSE_SINK:%.*]] 67 ; CHECK-NEXT: br i1 [[CMP]], label [[SELECT_END:%.*]], label [[SELECT_FALSE_SINK:%.*]]
65 ; CHECK: select.false.sink: 68 ; CHECK: select.false.sink:
66 ; CHECK-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]] 69 ; CHECK-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]]
67 ; CHECK-NEXT: br label [[SELECT_END]] 70 ; CHECK-NEXT: br label [[SELECT_END]]
68 ; CHECK: select.end: 71 ; CHECK: select.end:
69 ; CHECK-NEXT: [[SEL:%.*]] = phi float [ 4.000000e+00, [[ENTRY:%.*]] ], [ [[DIV]], [[SELECT_FALSE_SINK]] ] 72 ; CHECK-NEXT: [[SEL:%.*]] = phi float [ 4.000000e+00, [[ENTRY:%.*]] ], [ [[DIV]], [[SELECT_FALSE_SINK]] ]
70 ; CHECK-NEXT: ret float [[SEL]] 73 ; CHECK-NEXT: ret float [[SEL]]
71 ; 74 ;
72 ; DEBUG-LABEL: @fdiv_false_sink( 75 ; DEBUG-LABEL: @fdiv_false_sink(
73 ; DEBUG-NEXT: entry: 76 ; DEBUG-NEXT: entry:
74 ; DEBUG-NEXT: [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 3.000000e+00 77 ; DEBUG-NEXT: [[SEL_FR:%.*]] = freeze float [[A:%.*]]
78 ; DEBUG-NEXT: [[CMP:%.*]] = fcmp ogt float [[SEL_FR]], 3.000000e+00, !dbg !33
75 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP]] 79 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP]]
76 ; DEBUG-NEXT: br i1 [[CMP]], label [[SELECT_END:%.*]], label [[SELECT_FALSE_SINK:%.*]], !dbg 80 ; DEBUG-NEXT: br i1 [[CMP]], label [[SELECT_END:%.*]], label [[SELECT_FALSE_SINK:%.*]], !dbg
77 ; DEBUG: select.false.sink: 81 ; DEBUG: select.false.sink:
78 ; DEBUG-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]] 82 ; DEBUG-NEXT: [[DIV:%.*]] = fdiv float [[A]], [[B:%.*]]
79 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[DIV]] 83 ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[DIV]]
91 } 95 }
92 96
93 define float @fdiv_both_sink(float %a, float %b) { 97 define float @fdiv_both_sink(float %a, float %b) {
94 ; CHECK-LABEL: @fdiv_both_sink( 98 ; CHECK-LABEL: @fdiv_both_sink(
95 ; CHECK-NEXT: entry: 99 ; CHECK-NEXT: entry:
96 ; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[A:%.*]], 5.000000e+00 100 ; CHECK-NEXT: [[SEL_FR:%.*]] = freeze float [[A:%.*]]
101 ; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[SEL_FR]], 5.000000e+00
97 ; CHECK-NEXT: br i1 [[CMP]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_FALSE_SINK:%.*]] 102 ; CHECK-NEXT: br i1 [[CMP]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_FALSE_SINK:%.*]]
98 ; CHECK: select.true.sink: 103 ; CHECK: select.true.sink:
99 ; CHECK-NEXT: [[DIV1:%.*]] = fdiv float [[A]], [[B:%.*]] 104 ; CHECK-NEXT: [[DIV1:%.*]] = fdiv float [[A]], [[B:%.*]]
100 ; CHECK-NEXT: br label [[SELECT_END:%.*]] 105 ; CHECK-NEXT: br label [[SELECT_END:%.*]]
101 ; CHECK: select.false.sink: 106 ; CHECK: select.false.sink: