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. 10// 11//===----------------------------------------------------------------------===// 12 13// NOTE: NO INCLUDE GUARD DESIRED! 14 15#ifndef FUSION_FEATURE 16 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) 24 25#endif 26 27#ifndef FUSION_OP_SET 28#define FUSION_OP_SET(...) __VA_ARGS__ 29#endif 30 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} 34FUSION_FEATURE(AddiLoad, hasAddiLoadFusion, 2, \ 35 FUSION_OP_SET(ADDI, ADDI8, ADDItocL), \ 36 FUSION_OP_SET(LXVD2X, LXVW4X, LXVDSX, LVEBX, LVEHX, LVEWX, \ 37 LVX, LXSDX)) 38 39// {addis) followed by one of these {ld, lbz, lhz, lwz} 40FUSION_FEATURE(AddisLoad, hasAddisLoadFusion, 2, \ 41 FUSION_OP_SET(ADDIS, ADDIS8, ADDIStocHA8), \ 42 FUSION_OP_SET(LD, LBZ, LBZ8, LHZ, LHZ8, LWZ, LWZ8)) 43 44#undef FUSION_FEATURE 45#undef FUSION_OP_SET 46