[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / lib / Target / PowerPC / PPCMacroFusion.def
blobc7e4e7c22e0a65f6a3f19687c022959a7d42efdd
1 //=== ---- PPCMacroFusion.def - PowerPC MacroFuson Candidates -v-*- C++ -*-===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 //
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)
25 #endif
27 #ifndef FUSION_OP_SET
28 #define FUSION_OP_SET(...) __VA_ARGS__
29 #endif
31 // Power8 User Manual Section 10.1.12, Instruction Fusion
32 // {addi} followed by one of these {lxvd2x, lxvw4x, lxvdsx, lvebx, lvehx,
33 // lvewx, lvx, lxsdx}
34 FUSION_FEATURE(AddiLoad, hasAddiLoadFusion, 2, \
35 FUSION_OP_SET(ADDI, ADDI8, ADDItocL), \
36 FUSION_OP_SET(LXVD2X, LXVW4X, LXVDSX, LVEBX, LVEHX, LVEWX, \
37 LVX, LXSDX))
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))
44 #undef FUSION_FEATURE
45 #undef FUSION_OP_SET