===================================================================
*************** advance_state_on_fence (fence_t fence, i
if (FENCE_ISSUED_INSNS (fence) > issue_rate)
gcc_unreachable ();
}
+ else if (get_attr_nondfa_insn (insn) == 0)
+ {
+ error ("found an insn that does not modify DFA state");
+ fatal_insn ("this is the insn:", insn);
+ }
}
else
{
===================================================================
*************** Common Report Var(flag_selective_schedul
Schedule instructions using selective scheduling algorithm
fselective-scheduling2
! Common Report Var(flag_selective_scheduling2) Optimization
Run selective scheduling after reload
fsel-sched-pipelining
! Common Report Var(flag_sel_sched_pipelining) Init(0) Optimization
Perform software pipelining of inner loops during selective scheduling
fsel-sched-pipelining-outer-loops
Schedule instructions using selective scheduling algorithm
fselective-scheduling2
! Common Report Var(flag_selective_scheduling2) Optimization Init(1)
Run selective scheduling after reload
fsel-sched-pipelining
! Common Report Var(flag_sel_sched_pipelining) Init(1) Optimization
Perform software pipelining of inner loops during selective scheduling
fsel-sched-pipelining-outer-loops
===================================================================
*************** (define_attr "prefix" "orig,vex,maybe_ve
;; VEX W bit is used.
(define_attr "prefix_vex_w" "" (const_int 0))
+
+ (define_attr "nondfa_insn" "" (const_int 0))
+
;; The length of VEX prefix
;; Only instructions with 0f prefix can have 2 byte VEX prefix,
;; 0f38/0f3a prefixes can't. In i386.md 0f3[8a] is
*************** (define_insn "x86_fnstsw_1"
"fnstsw\t%0"
[(set (attr "length") (symbol_ref "ix86_attr_length_address_default (insn) + 2"))
(set_attr "mode" "SI")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "unit" "i387")])
;; FP compares, step 3
*************** (define_insn "*movti_internal_sse"
}
[(set_attr "type" "sselog1,ssemov,ssemov")
(set_attr "prefix" "maybe_vex")
+ (set (attr "nondfa_insn") (const_int 1))
(set (attr "mode")
(cond [(ior (eq (symbol_ref "TARGET_SSE2") (const_int 0))
(ne (symbol_ref "optimize_function_for_size_p (cfun)")
*************** (define_insn "*movdi_internal"
(if_then_else (eq_attr "alternative" "9,10,11,12")
(const_string "noavx")
(const_string "*")))
+ (set (attr "nondfa_insn") (if_then_else (eq_attr "alternative" "2,3,4,5,6,7,8,9,10,11,12") (const_int 1) (const_int 0)))
(set (attr "type")
(cond [(eq_attr "alternative" "0,1")
(const_string "multi")
*************** (define_insn "*movsi_internal"
(if_then_else (and (eq_attr "type" "ssemov") (eq_attr "mode" "SI"))
(const_string "1")
(const_string "*")))
+ (set (attr "nondfa_insn") (if_then_else (eq_attr "alternative" "6,7,9,11") (const_int 1) (const_int 0)))
(set (attr "mode")
(cond [(eq_attr "alternative" "2,3")
(const_string "DI")
*************** (define_insn "*movtf_internal"
}
[(set_attr "type" "ssemov,ssemov,sselog1,*,*")
(set_attr "prefix" "maybe_vex,maybe_vex,maybe_vex,*,*")
+ (set (attr "nondfa_insn") (if_then_else (eq_attr "alternative" "0,1,2") (const_int 1) (const_int 0)))
(set (attr "mode")
(cond [(eq_attr "alternative" "0,2")
(if_then_else
*************** (define_insn "*movdf_internal"
}
}
[(set_attr "type" "fmov,fmov,fmov,multi,multi,sselog1,ssemov,ssemov,ssemov")
+ (set (attr "nondfa_insn") (if_then_else (eq_attr "alternative" "3,4,5,6,7,8") (const_int 1) (const_int 0)))
(set (attr "prefix")
(if_then_else (eq_attr "alternative" "0,1,2,3,4")
(const_string "orig")
*************** (define_insn "zero_extendsidi2_1"
%vmovd\t{%1, %0|%0, %1}
%vmovd\t{%1, %0|%0, %1}"
[(set_attr "type" "multi,multi,multi,mmxmov,mmxmov,ssemov,ssemov")
+ (set (attr "nondfa_insn") (if_then_else (eq_attr "alternative" "3,4,5,6") (const_int 1) (const_int 0)))
(set_attr "prefix" "*,*,*,orig,orig,maybe_vex,maybe_vex")
(set_attr "mode" "SI,SI,SI,DI,DI,TI,TI")])
*************** (define_insn "*truncdfsf_fast_sse"
"TARGET_SSE2 && TARGET_SSE_MATH"
"%vcvtsd2ss\t{%1, %d0|%d0, %1}"
[(set_attr "type" "ssecvt")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "SF")])
*************** (define_insn "fix_trunc<mode>si_sse"
"%vcvtt<ssemodesuffix>2si\t{%1, %0|%0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "prefix" "maybe_vex")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "<MODE>")
(set_attr "athlon_decode" "double,vector")
(set_attr "amdfam10_decode" "double,double")
*************** (define_insn "x86_fnstcw_1"
[(set (attr "length")
(symbol_ref "ix86_attr_length_address_default (insn) + 2"))
(set_attr "mode" "HI")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "unit" "i387")
(set_attr "bdver1_decode" "vector")])
*************** (define_insn "x86_fldcw_1"
"fldcw\t%0"
[(set (attr "length")
(symbol_ref "ix86_attr_length_address_default (insn) + 2"))
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "HI")
(set_attr "unit" "i387")
(set_attr "athlon_decode" "vector")
*************** (define_insn "*float<SWI48x:mode><MODEF:
"%vcvtsi2<MODEF:ssemodesuffix><SWI48x:rex64suffix>\t{%1, %d0|%d0, %1}"
[(set_attr "type" "sseicvt")
(set_attr "prefix" "maybe_vex")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "<MODEF:MODE>")
(set (attr "prefix_rex")
(if_then_else
*************** (define_insn "*bswap<mode>2_1"
"bswap\t%0"
[(set_attr "type" "bitmanip")
(set_attr "modrm" "0")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "<MODE>")])
(define_insn "*bswaphi_lowpart_1"
*************** (define_insn "*sqrt<mode>2_sse"
"%vsqrt<ssemodesuffix>\t{%1, %d0|%d0, %1}"
[(set_attr "type" "sse")
(set_attr "atom_sse_attr" "sqrt")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "<MODE>")
(set_attr "athlon_decode" "*")
*************** (define_insn "fxam<mode>2_i387"
[(set_attr "type" "multi")
(set_attr "length" "4")
(set_attr "unit" "i387")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "<MODE>")])
(define_insn_and_split "fxam<mode>2_i387_with_temp"
===================================================================
*************** (define_insn "*mov<mode>_internal"
}
}
[(set_attr "type" "sselog1,ssemov,ssemov")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex")
(set (attr "mode")
(cond [(ne (symbol_ref "TARGET_AVX") (const_int 0))
*************** (define_insn "*<sse2>_movdqu<avxsizesuff
(const_string "*")
(const_string "1")))
(set_attr "prefix" "maybe_vex")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "<sseinsnmode>")])
(define_insn "<sse3>_lddqu<avxsizesuffix>"
*************** (define_insn "*<plusminus_insn><mode>3"
v<plusminus_mnemonic><ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sseadd")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "orig,vex")
(set_attr "mode" "<MODE>")])
*************** (define_insn "*mul<mode>3"
vmul<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "ssemul")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "orig,vex")
(set_attr "mode" "<MODE>")])
*************** (define_insn "sse_storehps"
%vmovhlps\t{%1, %d0|%d0, %1}
%vmovlps\t{%H1, %d0|%d0, %H1}"
[(set_attr "type" "ssemov")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "V2SF,V4SF,V2SF")])
*************** (define_insn "sse_loadhps"
%vmovlps\t{%2, %H0|%H0, %2}"
[(set_attr "isa" "noavx,avx,noavx,avx,*")
(set_attr "type" "ssemov")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
(set_attr "mode" "V2SF,V2SF,V4SF,V4SF,V2SF")])
*************** (define_insn "sse_storelps"
%vmovaps\t{%1, %0|%0, %1}
%vmovlps\t{%1, %d0|%d0, %1}"
[(set_attr "type" "ssemov")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "V2SF,V4SF,V2SF")])
*************** (define_insn "sse_loadlps"
%vmovlps\t{%2, %0|%0, %2}"
[(set_attr "isa" "noavx,avx,noavx,avx,*")
(set_attr "type" "sselog,sselog,ssemov,ssemov,ssemov")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "length_immediate" "1,1,*,*,*")
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
*************** (define_insn "vec_set<mode>_0"
(const_string "ssemov")))
(set_attr "prefix_extra" "*,*,*,*,*,*,1,1,*,*,*")
(set_attr "length_immediate" "*,*,*,*,*,*,1,1,*,*,*")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex,maybe_vex,maybe_vex,orig,orig,vex,orig,vex,*,*,*")
(set_attr "mode" "SF,<ssescalarmode>,SI,SF,SF,SF,TI,TI,*,*,*")])
*************** (define_insn "*vec_interleave_highv2df"
[(set_attr "isa" "noavx,avx,*,noavx,avx,*")
(set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
(set_attr "prefix_data16" "*,*,*,1,*,1")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
(set_attr "mode" "V2DF,V2DF,V2DF,V1DF,V1DF,V1DF")])
*************** (define_insn "*vec_interleave_lowv2df"
vmovhpd\t{%2, %1, %0|%0, %1, %2}
%vmovlpd\t{%2, %H0|%H0, %2}"
[(set_attr "isa" "noavx,avx,*,noavx,avx,*")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
(set_attr "prefix_data16" "*,*,*,1,*,1")
(set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
*************** (define_insn "sse2_storehpd"
#
#"
[(set_attr "isa" "*,noavx,avx,*,*,*")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "type" "ssemov,sselog1,sselog1,ssemov,fmov,imov")
(set (attr "prefix_data16")
(if_then_else
*************** (define_insn "sse2_storelpd"
#"
[(set_attr "type" "ssemov,ssemov,ssemov,fmov,imov")
(set_attr "prefix_data16" "1,*,*,*,*")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "V1DF,DF,DF,DF,DF")])
*************** (define_insn "*vec_dupv2df"
"TARGET_SSE2"
"unpcklpd\t%0, %0"
[(set_attr "type" "sselog1")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "V2DF")])
(define_insn "*vec_concatv2df_sse3"
*************** (define_insn "*vec_concatv2df"
movlhps\t{%2, %0|%0, %2}
movhps\t{%2, %0|%0, %2}"
[(set_attr "isa" "noavx,avx,noavx,avx,*,noavx,noavx")
+ (set (attr "nondfa_insn") (const_int 1))
(set (attr "type")
(if_then_else
(eq_attr "alternative" "0,1")
*************** (define_insn "*<plusminus_insn><mode>3"
vp<plusminus_mnemonic><ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sseiadd")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
(set_attr "mode" "TI")])
*************** (define_insn "*mulv8hi3"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sseimul")
(set_attr "prefix_data16" "1,*")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "orig,vex")
(set_attr "mode" "TI")])
*************** (define_insn "*sse2_umulv2siv2di3"
pmuludq\t{%2, %0|%0, %2}
vpmuludq\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "type" "sseimul")
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
*************** (define_insn "ashr<mode>3"
vpsra<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sseishft")
+ (set (attr "nondfa_insn") (const_int 1))
(set (attr "length_immediate")
(if_then_else (match_operand 2 "const_int_operand" "")
(const_string "1")
*************** (define_insn "lshr<mode>3"
vpsrl<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sseishft")
+ (set (attr "nondfa_insn") (const_int 1))
(set (attr "length_immediate")
(if_then_else (match_operand 2 "const_int_operand" "")
(const_string "1")
*************** (define_insn "ashl<mode>3"
vpsll<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sseishft")
+ (set (attr "nondfa_insn") (const_int 1))
(set (attr "length_immediate")
(if_then_else (match_operand 2 "const_int_operand" "")
(const_string "1")
*************** (define_insn "sse2_lshrv1ti3"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sseishft")
(set_attr "length_immediate" "1")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "atom_unit" "sishuf")
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
*************** (define_insn "*andnottf3"
vpandn\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sselog")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
(set_attr "mode" "TI")])
*************** (define_insn "*<code>tf3"
(set_attr "type" "sselog")
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "TI")])
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
*************** (define_insn "vec_interleave_highv16qi"
vpunpckhbw\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sselog")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
(set_attr "mode" "TI")])
*************** (define_insn "vec_interleave_lowv16qi"
vpunpcklbw\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sselog")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
(set_attr "mode" "TI")])
*************** (define_insn "vec_interleave_lowv8hi"
vpunpcklwd\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sselog")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
(set_attr "mode" "TI")])
*************** (define_insn "vec_interleave_lowv4si"
vpunpckldq\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "isa" "noavx,avx")
(set_attr "type" "sselog")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix_data16" "1,*")
(set_attr "prefix" "orig,vex")
(set_attr "mode" "TI")])
*************** (define_insn "sse2_pshufd_1"
}
[(set_attr "type" "sselog1")
(set_attr "prefix_data16" "1")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex")
(set_attr "length_immediate" "1")
(set_attr "mode" "TI")])
*************** (define_insn "*vec_dupv4si"
pshufd\t{$0, %1, %0|%0, %1, 0}
shufps\t{$0, %0, %0|%0, %0, 0}"
[(set_attr "type" "sselog1")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "length_immediate" "1")
(set_attr "mode" "TI,V4SF")])
*************** (define_insn "*vec_dupv2di"
punpcklqdq\t%0, %0
movlhps\t%0, %0"
[(set_attr "type" "sselog1,ssemov")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "mode" "TI,V4SF")])
(define_insn "*vec_concatv2si_sse4_1"
*************** (define_insn "sse_ldmxcsr"
"%vldmxcsr\t%0"
[(set_attr "type" "sse")
(set_attr "atom_sse_attr" "mxcsr")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "maybe_vex")
(set_attr "memory" "load")])
*************** (define_insn "sse_stmxcsr"
"TARGET_SSE"
"%vstmxcsr\t%0"
[(set_attr "type" "sse")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "atom_sse_attr" "mxcsr")
(set_attr "prefix" "maybe_vex")
(set_attr "memory" "store")])
*************** (define_insn "*sse2_mfence"
"TARGET_64BIT || TARGET_SSE2"
"mfence"
[(set_attr "type" "sse")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "length_address" "0")
(set_attr "atom_sse_attr" "fence")
(set_attr "memory" "unknown")])
*************** (define_insn "vec_dup<mode>"
#"
[(set_attr "type" "ssemov")
(set_attr "prefix_extra" "1")
+ (set (attr "nondfa_insn") (const_int 1))
(set_attr "prefix" "vex")
(set_attr "mode" "V8SF")])