150d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling// REQUIRES: arm-registered-target
22440fb1f91557912f8c43cb72201170254ae09f4Amara Emerson// RUN: %clang_cc1 -triple armv7 -target-feature +neon %s -emit-llvm -o /dev/null
350d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling
4e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendlingchar bar();
5e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendling
6e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendlingvoid t1(int x, char y) {
7e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendling  __asm__ volatile("mcr p15, 0, %1, c9, c12, 5;"
8e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendling                   "mrc p15, 0, %0, c9, c13, 2;"
9e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendling                   : "=r" (x)
10e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendling                   : "r" (bar())); // no warning
116e6330c07a42ace74637d0ad7356a2fa20de81ecBill Wendling  __asm__ volatile("foo %0, %1"
126e6330c07a42ace74637d0ad7356a2fa20de81ecBill Wendling                   : "+r" (x),
136e6330c07a42ace74637d0ad7356a2fa20de81ecBill Wendling                     "+r" (y)
146e6330c07a42ace74637d0ad7356a2fa20de81ecBill Wendling                   :);
15221a8908e4521de533bace49566b5281df9b1924Bob Wilson  __asm__ volatile("ldrb %0, [%1]" : "=r" (y) : "r" (x)); // no warning
16e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendling}
17e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendling
18e2dbaa9f78be2b09b0723d1b614286412808b5d3Bill Wendling// <rdar://problem/12284092>
1950d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendlingtypedef __attribute__((neon_vector_type(2))) long long int64x2_t;
2050d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendlingtypedef struct int64x2x4_t {
2150d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling  int64x2_t val[4];
2250d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling} int64x2x4_t;
2350d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendlingint64x2x4_t t2(const long long a[]) {
2450d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling  int64x2x4_t r;
2550d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling  __asm__("vldm %[a], { %q[r0], %q[r1], %q[r2], %q[r3] }"
264d2ea738175aacc7405e76a7e92b7e20f05519c6Bob Wilson          : [r0] "=r"(r.val[0]), // expected-warning {{value size does not match register size specified by the constraint and modifier}}
274d2ea738175aacc7405e76a7e92b7e20f05519c6Bob Wilson            [r1] "=r"(r.val[1]), // expected-warning {{value size does not match register size specified by the constraint and modifier}}
284d2ea738175aacc7405e76a7e92b7e20f05519c6Bob Wilson            [r2] "=r"(r.val[2]), // expected-warning {{value size does not match register size specified by the constraint and modifier}}
294d2ea738175aacc7405e76a7e92b7e20f05519c6Bob Wilson            [r3] "=r"(r.val[3])  // expected-warning {{value size does not match register size specified by the constraint and modifier}}
3050d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling          : [a] "r"(a));
3150d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling  return r;
3250d46caf00c743312e0ea1f87a693d504b12ef51Bill Wendling}
33