1 //=== ---- PPCMacroFusion.def
- PowerPC MacroFuson Candidates
-v
-*- C
++ -*-===//
3 // Part of the LLVM Project
, under the Apache License v2.0 with LLVM Exceptions.
4 // See https
)//llvm.org
/LICENSE.txt for license information.
5 // SPDX
-License
-Identifier
) Apache
-2.0 WITH LLVM
-exception
7 //===----------------------------------------------------------------------===//
9 // This file contains descriptions of the macro
-fusion pair for PowerPC.
11 //===----------------------------------------------------------------------===//
13 // NOTE
: NO INCLUDE GUARD DESIRED
!
15 #ifndef FUSION_FEATURE
17 // Each FUSION_FEATURE is assigned with one
TYPE, and can be enabled
/disabled
18 // by HAS_FEATURE. The instructions pair is fusable only when the opcode
19 // of the first instruction is in OPSET1
, and the second instruction opcode is
20 // in OPSET2. And if DEP_OP_IDX
>=0, we will check the result of first OP is
21 // the operand of the second op with DEP_OP_IDX as its operand index. We assume
22 // that the result of the first op is its operand zero.
23 #define
FUSION_FEATURE(TYPE, HAS_FEATURE
, DEP_OP_IDX
, OPSET1
, OPSET2
)
28 #define
FUSION_OP_SET(...
) __VA_ARGS__
31 // Power8 User Manual Section
10.1.12, Instruction Fusion
32 // {addi
} followed by one of these
{lxvd2x
, lxvw4x
, lxvdsx
, lvebx
, lvehx
,
34 FUSION_FEATURE(AddiLoad
, hasAddiLoadFusion
, 2, \
35 FUSION_OP_SET(ADDI
, ADDI8
, ADDItocL
), \
36 FUSION_OP_SET(LXVD2X
, LXVW4X
, LXVDSX
, LVEBX
, LVEHX
, LVEWX
, \
39 // {addis
) followed by one of these
{ld
, lbz
, lhz
, lwz
}
40 FUSION_FEATURE(AddisLoad
, hasAddisLoadFusion
, 2, \
41 FUSION_OP_SET(ADDIS
, ADDIS8
, ADDIStocHA8
), \
42 FUSION_OP_SET(LD
, LBZ
, LBZ8
, LHZ
, LHZ8
, LWZ
, LWZ8
))