<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Compiler Collection (GCC) Internals: Disable Insn Alternatives</title>

<meta name="description" content="GNU Compiler Collection (GCC) Internals: Disable Insn Alternatives">
<meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Disable Insn Alternatives">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Constraints.html#Constraints" rel="up" title="Constraints">
<link href="Define-Constraints.html#Define-Constraints" rel="next" title="Define Constraints">
<link href="Machine-Constraints.html#Machine-Constraints" rel="prev" title="Machine Constraints">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Disable-Insn-Alternatives"></a>
<div class="header">
<p>
Next: <a href="Define-Constraints.html#Define-Constraints" accesskey="n" rel="next">Define Constraints</a>, Previous: <a href="Machine-Constraints.html#Machine-Constraints" accesskey="p" rel="prev">Machine Constraints</a>, Up: <a href="Constraints.html#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Disable-insn-alternatives-using-the-enabled-attribute"></a>
<h4 class="subsection">16.8.6 Disable insn alternatives using the <code>enabled</code> attribute</h4>
<a name="index-enabled"></a>

<p>The <code>enabled</code> insn attribute may be used to disable certain insn
alternatives for machine-specific reasons.  This is useful when adding
new instructions to an existing pattern which are only available for
certain cpu architecture levels as specified with the <code>-march=</code>
option.
</p>
<p>If an insn alternative is disabled, then it will never be used.  The
compiler treats the constraints for the disabled alternative as
unsatisfiable.
</p>
<p>In order to make use of the <code>enabled</code> attribute a back end has to add
in the machine description files:
</p>
<ol>
<li> A definition of the <code>enabled</code> insn attribute.  The attribute is
defined as usual using the <code>define_attr</code> command.  This
definition should be based on other insn attributes and/or target flags.
The <code>enabled</code> attribute is a numeric attribute and should evaluate to
<code>(const_int 1)</code> for an enabled alternative and to
<code>(const_int 0)</code> otherwise.
</li><li> A definition of another insn attribute used to describe for what
reason an insn alternative might be available or
not.  E.g. <code>cpu_facility</code> as in the example below.
</li><li> An assignment for the second attribute to each insn definition
combining instructions which are not all available under the same
circumstances.  (Note: It obviously only makes sense for definitions
with more than one alternative.  Otherwise the insn pattern should be
disabled or enabled using the insn condition.)
</li></ol>

<p>E.g. the following two patterns could easily be merged using the <code>enabled</code>
attribute:
</p>
<div class="smallexample">
<pre class="smallexample">
(define_insn &quot;*movdi_old&quot;
  [(set (match_operand:DI 0 &quot;register_operand&quot; &quot;=d&quot;)
        (match_operand:DI 1 &quot;register_operand&quot; &quot; d&quot;))]
  &quot;!TARGET_NEW&quot;
  &quot;lgr %0,%1&quot;)

(define_insn &quot;*movdi_new&quot;
  [(set (match_operand:DI 0 &quot;register_operand&quot; &quot;=d,f,d&quot;)
        (match_operand:DI 1 &quot;register_operand&quot; &quot; d,d,f&quot;))]
  &quot;TARGET_NEW&quot;
  &quot;@
   lgr  %0,%1
   ldgr %0,%1
   lgdr %0,%1&quot;)

</pre></div>

<p>to:
</p>
<div class="smallexample">
<pre class="smallexample">
(define_insn &quot;*movdi_combined&quot;
  [(set (match_operand:DI 0 &quot;register_operand&quot; &quot;=d,f,d&quot;)
        (match_operand:DI 1 &quot;register_operand&quot; &quot; d,d,f&quot;))]
  &quot;&quot;
  &quot;@
   lgr  %0,%1
   ldgr %0,%1
   lgdr %0,%1&quot;
  [(set_attr &quot;cpu_facility&quot; &quot;*,new,new&quot;)])

</pre></div>

<p>with the <code>enabled</code> attribute defined like this:
</p>
<div class="smallexample">
<pre class="smallexample">
(define_attr &quot;cpu_facility&quot; &quot;standard,new&quot; (const_string &quot;standard&quot;))

(define_attr &quot;enabled&quot; &quot;&quot;
  (cond [(eq_attr &quot;cpu_facility&quot; &quot;standard&quot;) (const_int 1)
         (and (eq_attr &quot;cpu_facility&quot; &quot;new&quot;)
              (ne (symbol_ref &quot;TARGET_NEW&quot;) (const_int 0)))
         (const_int 1)]
        (const_int 0)))

</pre></div>


<hr>
<div class="header">
<p>
Next: <a href="Define-Constraints.html#Define-Constraints" accesskey="n" rel="next">Define Constraints</a>, Previous: <a href="Machine-Constraints.html#Machine-Constraints" accesskey="p" rel="prev">Machine Constraints</a>, Up: <a href="Constraints.html#Constraints" accesskey="u" rel="up">Constraints</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
