Mercurial > hg > CbC > CbC_llvm
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: |