https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91825

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Somewhat reduced:

typedef struct rtx_def *rtx;
enum machine_mode {
  E_VOIDmode,
  E_BLKmode,
  E_CCmode,
  E_CCFPmode,
  E_CCFPEmode,
  E_CC_SWPmode,
  E_CC_NZCmode,
  E_CC_NZmode,
  E_CC_Zmode,
  E_CC_Cmode,
  E_CC_ADCmode,
  E_CC_Vmode,
  E_BImode,
  E_QImode,
  E_HImode,
  E_SImode,
  E_DImode,
  E_TImode,
  E_OImode,
  E_CImode,
  E_XImode,
  E_QQmode,
  E_HQmode,
  E_SQmode,
  E_DQmode,
  E_TQmode,
  E_UQQmode,
  E_UHQmode,
  E_USQmode,
  E_UDQmode,
  E_UTQmode,
  E_HAmode,
  E_SAmode,
  E_DAmode,
  E_TAmode,
  E_UHAmode,
  E_USAmode,
  E_UDAmode,
  E_UTAmode,
  E_HFmode,
  E_SFmode,
  E_DFmode,
  E_TFmode,
  E_SDmode,
  E_DDmode,
  E_TDmode,
  E_CQImode,
  E_CHImode,
  E_CSImode,
  E_CDImode,
  E_CTImode,
  E_COImode,
  E_CCImode,
  E_CXImode,
  E_HCmode,
  E_SCmode,
  E_DCmode,
  E_TCmode,
  E_V8QImode,
  E_V4HImode,
  E_V2SImode,
  E_V16QImode,
  E_V8HImode,
  E_V4SImode,
  E_V2DImode,
  E_VNx2TImode,
  E_VNx3TImode,
  E_VNx4TImode,
  E_VNx2OImode,
  E_V2HFmode,
  E_V4HFmode,
  E_V2SFmode,
  E_V2DFmode,
  NUM_MACHINE_MODES
};
template <int N> struct A { int coeffs[N]; };
template <int N> class C : public A<N> {
public:
  template <typename C0> C(const C0 &);
};
machine_mode mode_size_inline_mode, emit_store_flag_1_target_mode;
A<2> mode_size[1];
struct B {
  enum from_int {};
};
extern const char mode_class[NUM_MACHINE_MODES];
template <typename T> T as_a(machine_mode);
class scalar_int_mode {
public:
  scalar_int_mode() {}
  scalar_int_mode(B::from_int p1) : m_mode(machine_mode(p1)) {}
  operator machine_mode() { return m_mode; }
  machine_mode m_mode;
} mode_to_bytes_mode;
scalar_int_mode word_mode;
template <typename T> bool is_int_mode(machine_mode p1, T p2) {
  if (mode_class[p1]) {
    *p2 = B::from_int(p1);
    return true;
  }
  return false;
}
enum insn_code {};
enum rtx_code { GE, LE, LT };
struct rtx_def {
  rtx_code code;
  machine_mode mode;
};
rtx const_int_rtx_63, const_int_rtx_64, emit_store_flag_1_subtarget,
    emit_store_flag_1_tem, emit_store_flag_1_op00, emit_store_flag_1_op01,
    emit_store_flag_1_op0h, emit_store_flag_1_target, emit_store_flag_1_op0,
    emit_store_flag_1_op1;
enum tree_code { RSHIFT_EXPR };
enum optab_tag { and_optab, ior_optab, one_cmpl_optab };
enum optab_methods { OPTAB_DIRECT };
insn_code emit_store_flag_1_icode;
rtx_code emit_store_flag_1_code;
int emit_store_flag_1_unsignedp, emit_store_flag_1_normalizep;
short emit_store_flag_1___trans_tmp_24, emit_store_flag_1___trans_tmp_23;
bool iterate_p();
inline __attribute__((__always_inline__)) C<2> mode_size_inline() {
  A<2> mode_size;
  switch (mode_size_inline_mode) {
  case E_VOIDmode:
    return 0;
  case E_BLKmode:
    return 0;
  case E_CCmode:
    return 4;
  case E_CCFPmode:
    return 4;
  case E_CCFPEmode:
    return 4;
  case E_CC_SWPmode:
    return 4;
  case E_CC_NZCmode:
    return 4;
  case E_CC_NZmode:
    return 4;
  case E_CC_Zmode:
    return 4;
  case E_CC_Cmode:
    return 4;
  case E_CC_ADCmode:
    return 4;
  case E_CC_Vmode:
    return 4;
  case E_BImode:
    return 1;
  case E_QImode:
    return 1;
  case E_HImode:
    return 2;
  case E_SImode:
    return 4;
  case E_DImode:
    return 8;
  case E_TImode:
    return 6;
  case E_OImode:
    return 2;
  case E_CImode:
    return 8;
  case E_XImode:
    return 4;
  case E_QQmode:
    return 1;
  case E_HQmode:
    return 2;
  case E_SQmode:
    return 4;
  case E_DQmode:
    return 8;
  case E_TQmode:
    return 6;
  case E_UQQmode:
    return 1;
  case E_UHQmode:
    return 2;
  case E_USQmode:
    return 4;
  case E_UDQmode:
    return 8;
  case E_UTQmode:
    return 6;
  case E_HAmode:
    return 2;
  case E_SAmode:
    return 4;
  case E_DAmode:
    return 8;
  case E_TAmode:
    return 6;
  case E_UHAmode:
    return 2;
  case E_USAmode:
    return 4;
  case E_UDAmode:
    return 8;
  case E_UTAmode:
    return 6;
  case E_HFmode:
    return 2;
  case E_SFmode:
    return 4;
  case E_DFmode:
    return 8;
  case E_TFmode:
    return 6;
  case E_SDmode:
    return 4;
  case E_DDmode:
    return 8;
  case E_TDmode:
    return 6;
  case E_CQImode:
    return 2;
  case E_CHImode:
    return 4;
  case E_CSImode:
    return 8;
  case E_CDImode:
    return 6;
  case E_CTImode:
    return 2;
  case E_COImode:
    return 4;
  case E_CCImode:
    return 6;
  case E_CXImode:
    return 8;
  case E_HCmode:
    return 4;
  case E_SCmode:
    return 8;
  case E_DCmode:
    return 6;
  case E_TCmode:
    return 2;
  case E_V8QImode:
    return 8;
  case E_V4HImode:
    return 8;
  case E_V2SImode:
    return 8;
  case E_V16QImode:
    return 6;
  case E_V8HImode:
    return 6;
  case E_V4SImode:
    return 6;
  case E_V2DImode:
    return 6;
  case E_VNx2TImode:
    return 2;
  case E_VNx3TImode:
    return 8;
  case E_VNx4TImode:
    return 4;
  case E_VNx2OImode:
    return 4;
  case E_V2HFmode:
    return 4;
  case E_V4HFmode:
    return 8;
  case E_V2SFmode:
    return 8;
  case E_V2DFmode:
    return 6;
  default:
    return mode_size;
  }
}
inline __attribute__((always_inline)) C<2> mode_to_bytes() {
  return mode_to_bytes_mode ? mode_size_inline() : mode_size[0];
}
inline __attribute__((always_inline)) C<2> mode_to_bits() {
  mode_to_bytes();
  return 0;
}
inline __attribute__((always_inline)) short GET_MODE_SIZE(scalar_int_mode) {
  return mode_to_bytes().coeffs[0];
}
inline __attribute__((always_inline)) short GET_MODE_BITSIZE(scalar_int_mode) {
  return mode_to_bits().coeffs[0];
}
void get_wider();
void simplify_gen_subreg(machine_mode, rtx, machine_mode, C<2>);
bool val_signbit_known_set_p(machine_mode, long);
rtx emit_store_flag(rtx, rtx_code, rtx, rtx, machine_mode, int, int);
rtx expand_shift(tree_code, machine_mode, rtx, C<2>, rtx, int);
insn_code optab_handler();
void expand_binop(machine_mode, optab_tag, rtx, rtx, rtx, int, optab_methods);
rtx expand_unop(machine_mode, optab_tag, rtx, rtx, int);
void convert_move(rtx, rtx, int);
rtx convert_modes(machine_mode, machine_mode, rtx, int);
rtx emit_cstore();
rtx emit_store_flag_1(machine_mode p1) {
  scalar_int_mode int_mode;
  emit_store_flag_1___trans_tmp_23 = mode_to_bits().coeffs[0];
  if (is_int_mode(p1, &int_mode) *
      (emit_store_flag_1_op0->code || emit_store_flag_1_op0))
    if (emit_store_flag_1_code && const_int_rtx_63) {
      machine_mode __trans_tmp_3 = word_mode, __trans_tmp_4 = int_mode,
                   __trans_tmp_5 = word_mode, __trans_tmp_6 = int_mode,
                   __trans_tmp_7 = word_mode;
      simplify_gen_subreg(__trans_tmp_3, emit_store_flag_1_op0, __trans_tmp_4,
                          0);
      simplify_gen_subreg(__trans_tmp_5, emit_store_flag_1_op0, __trans_tmp_6,
                          8);
      expand_binop(__trans_tmp_7, const_int_rtx_64 ? ior_optab : and_optab,
                   emit_store_flag_1_op00, emit_store_flag_1_op01, 0,
                   emit_store_flag_1_unsignedp, OPTAB_DIRECT);
      if (emit_store_flag_1_tem) {
        machine_mode __trans_tmp_8 = word_mode;
        emit_store_flag(0, emit_store_flag_1_code, emit_store_flag_1_tem,
                        emit_store_flag_1_op1, __trans_tmp_8,
                        emit_store_flag_1_unsignedp,
                        emit_store_flag_1_normalizep);
      }
    }
  if (emit_store_flag_1_code || emit_store_flag_1_code && const_int_rtx_64)
    machine_mode __trans_tmp_9 = word_mode;
  machine_mode __trans_tmp_10 = int_mode, __trans_tmp_12 = word_mode,
               __trans_tmp_14 = word_mode;
  emit_store_flag_1_tem = emit_store_flag(
      0, emit_store_flag_1_code, emit_store_flag_1_op0h, emit_store_flag_1_op1,
      __trans_tmp_12, emit_store_flag_1_unsignedp,
      emit_store_flag_1_target_mode ||
          emit_store_flag_1_tem->mode == emit_store_flag_1_target_mode);
  bool __trans_tmp_13 = val_signbit_known_set_p(
      __trans_tmp_14, emit_store_flag_1_normalizep ?: 1);
  convert_move(emit_store_flag_1_target, 0, __trans_tmp_13);
  if (emit_store_flag_1_op1 == const_int_rtx_64 &&
      (emit_store_flag_1_code == LT || emit_store_flag_1_code == GE) &&
      is_int_mode(p1, &int_mode)) {
    scalar_int_mode int_target_mode = int_target_mode =
        as_a<scalar_int_mode>(emit_store_flag_1_target_mode);
    emit_store_flag_1___trans_tmp_24 = mode_to_bytes().coeffs[0];
    if (GET_MODE_SIZE(int_mode)) {
      machine_mode __trans_tmp_15 = int_target_mode, __trans_tmp_16 = int_mode;
      emit_store_flag_1_op0 = convert_modes(__trans_tmp_15, __trans_tmp_16,
                                            emit_store_flag_1_op0, 0);
    }
    int_mode = int_target_mode;
    if (int_mode)
      emit_store_flag_1_subtarget = 0;
    if (emit_store_flag_1_code) {
      machine_mode __trans_tmp_17 = int_mode, __trans_tmp_18 = int_mode;
      emit_store_flag_1_op0 =
          expand_unop(__trans_tmp_17, one_cmpl_optab, emit_store_flag_1_op0,
                      emit_store_flag_1_subtarget, 0);
      GET_MODE_BITSIZE(int_mode);
      emit_store_flag_1_normalizep = 1;
      emit_store_flag_1_op0 =
          expand_shift(RSHIFT_EXPR, __trans_tmp_18, emit_store_flag_1_op0, 1,
                       emit_store_flag_1_subtarget, 1);
    }
    if (int_mode = int_target_mode) {
      machine_mode __trans_tmp_20 = int_target_mode, __trans_tmp_21 = int_mode;
      emit_store_flag_1_op0 = convert_modes(__trans_tmp_20, __trans_tmp_21,
                                            emit_store_flag_1_op0, 0);
    }
  }
  for (; iterate_p();)
    emit_store_flag_1_icode = optab_handler();
  if (emit_store_flag_1_icode)
    get_wider();
  rtx tem = emit_cstore();
  if (tem)
    if (mode_class[p1])
      tem = emit_cstore();
  if (tem)
    return tem;
  return 0;
}

Reply via email to