Issue 177107
Summary [ARM][ISel] Miscompile for arm neon vqdmlal
Labels new issue
Assignees
Reporter hstk30-hw
    https://godbolt.org/z/T93587eM8

```
#include <arm_neon.h>
#include <stdio.h>

typedef union {
  struct {
    int _xxx:24;
    unsigned int FZ:1;
    unsigned int DN:1;
    unsigned int AHP:1;
    unsigned int QC:1;
    int V:1;
    int C:1;
    int Z:1;
 int N:1;
  } b;
  unsigned int word;
} _ARM_FPSCR;

extern void abort(void);
extern void *memset(void *, int, size_t);
extern void *memcpy(void *, const void *, size_t);
extern size_t strlen(const char *);

static int32_t result_int32x4[4];

static float32_t result_float32x4[4];
static void clean_results (void)
{
 memset(result_int32x4, 0x33, sizeof(result_int32x4));;
}

int64_t buffer_int64x2 [] = { (int64_t)-16, (int64_t)-15, };
int32_t buffer_int32x4 [] = { (int32_t)-16, (int32_t)-15, (int32_t)-14, (int32_t)-13, };

static volatile int __read_neon_cumulative_sat (void) {
    _ARM_FPSCR _afpscr_for_qc;
    asm volatile ("vmrs %0,fpscr" : "=r" (_afpscr_for_qc));
    return _afpscr_for_qc.b.QC;
}

int main (void)
{
  int32x4_t vector_int32x4;
  int16x4_t vector3_int16x4;
 int16x4_t vector4_int16x4;
  int32x4_t vector_res_int32x4;

 clean_results ();

  vector_int32x4 = vld1q_s32(buffer_int32x4);

 vector3_int16x4 = vdup_n_s16(0x8000);
  vector4_int16x4 = vdup_n_s16(0x8000);

  _ARM_FPSCR _afpscr_for_qc;
  asm volatile ("vmrs %0,fpscr" : "=r" (_afpscr_for_qc));
  _afpscr_for_qc.b.QC = (0);
  // asm volatile ("vmsr fpscr,%1" : "=g" ((vector_res_int32x4)) : "r" (_afpscr_for_qc));
  asm volatile ("vmsr fpscr,%0" :  : "r" (_afpscr_for_qc) : "memory");

  vector_res_int32x4 = vqdmlal_s16(vector_int32x4, vector3_int16x4, vector4_int16x4);
 vst1q_s32(result_int32x4, vector_res_int32x4);

  if (__read_neon_cumulative_sat() != 1) {
          printf("fail\n");
 abort();
  }
  printf("success\n");

  return 0;
}
```

The code is fail, cause instruction

```
vqdmlal.s16     q9, d16, d16
```

is before 

```
        vmrs    r0, fpscr
        bic     r0, r0, #134217728
        vmsr    fpscr, r0
```



_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to