Line data Source code
1 : //===- lib/CodeGen/GlobalISel/LegalizerMutations.cpp - Mutations ----------===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : //
10 : // A library of mutation factories to use for LegalityMutation.
11 : //
12 : //===----------------------------------------------------------------------===//
13 :
14 : #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
15 :
16 : using namespace llvm;
17 :
18 380812 : LegalizeMutation LegalizeMutations::changeTo(unsigned TypeIdx, LLT Ty) {
19 : return
20 762274 : [=](const LegalityQuery &Query) { return std::make_pair(TypeIdx, Ty); };
21 : }
22 :
23 3140 : LegalizeMutation LegalizeMutations::changeTo(unsigned TypeIdx,
24 : unsigned FromTypeIdx) {
25 : return [=](const LegalityQuery &Query) {
26 15 : return std::make_pair(TypeIdx, Query.Types[FromTypeIdx]);
27 3140 : };
28 : }
29 :
30 123153 : LegalizeMutation LegalizeMutations::widenScalarToNextPow2(unsigned TypeIdx,
31 : unsigned Min) {
32 : return [=](const LegalityQuery &Query) {
33 : unsigned NewSizeInBits =
34 : 1 << Log2_32_Ceil(Query.Types[TypeIdx].getSizeInBits());
35 : if (NewSizeInBits < Min)
36 : NewSizeInBits = Min;
37 : return std::make_pair(TypeIdx, LLT::scalar(NewSizeInBits));
38 123153 : };
39 : }
40 :
41 1570 : LegalizeMutation LegalizeMutations::moreElementsToNextPow2(unsigned TypeIdx,
42 : unsigned Min) {
43 : return [=](const LegalityQuery &Query) {
44 : const LLT &VecTy = Query.Types[TypeIdx];
45 : unsigned NewNumElements = 1 << Log2_32_Ceil(VecTy.getNumElements());
46 : if (NewNumElements < Min)
47 : NewNumElements = Min;
48 : return std::make_pair(
49 : TypeIdx, LLT::vector(NewNumElements, VecTy.getScalarSizeInBits()));
50 1570 : };
51 : }
|