Index: lib/Headers/arm_acle.h =================================================================== --- lib/Headers/arm_acle.h +++ lib/Headers/arm_acle.h @@ -90,6 +90,11 @@ __qsub(int32_t t, int32_t v) { return __builtin_arm_qsub(t, v); } + +static __inline__ int32_t __attribute__((always_inline, nodebug)) +__qdbl(int32_t t) { + return __builtin_arm_qadd(t, t); +} #endif /* CRC32 intrinsics */ Index: test/CodeGen/arm_acle.c =================================================================== --- test/CodeGen/arm_acle.c +++ test/CodeGen/arm_acle.c @@ -66,6 +66,15 @@ int32_t test_qsub(int32_t a, int32_t b) { return __qsub(a, b); } + +extern int32_t f(); +// AArch32-LABEL: test_qdbl +// AArch32: [[VAR:%[a-z0-9]+]] = {{.*}} call {{.*}} @f +// AArch32-NOT: call {{.*}} @f +// AArch32: call i32 @llvm.arm.qadd(i32 [[VAR]], i32 [[VAR]]) +int32_t test_qdbl() { + return __qdbl(f()); +} #endif /* CRC32 intrinsics */