1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

Revert "[llvm][test] Add COM: directives before colon-less non-CHECKs in comments. NFC"

This reverts commit 183d6af081899973f00fc24aeafcfc32de732f02.

Revert pending further consensus building: https://reviews.llvm.org/D79963#2050521
This commit is contained in:
Jon Roelofs 2020-05-22 05:36:15 -06:00
parent 5e623df3e9
commit d0f0991d73
49 changed files with 552 additions and 556 deletions

View File

@ -89,7 +89,7 @@ entry:
ret void
}
; COM: GFX9_10 can use a signed immediate byte offset
; GFX9_10 can use a signed immediate byte offset
; GCN-LABEL: {{^}}smrd6:
; SICIVI: s_add_u32 s{{[0-9]}}, s{{[0-9]}}, -4
; SICIVI: s_load_dword s{{[0-9]}}, s[{{[0-9]:[0-9]}}], 0x0

View File

@ -240,9 +240,9 @@ define amdgpu_kernel void @fp_to_uint_fabs_f32_to_i1(i1 addrspace(1)* %out, floa
}
; FUNC-LABEL: {{^}}fp_to_uint_f32_to_i16:
; COM: The reason different instructions are used on SI and VI is because for
; COM: SI fp_to_uint is legalized by the type legalizer and for VI it is
; COM: legalized by the dag legalizer and they legalize fp_to_uint differently.
; The reason different instructions are used on SI and VI is because for
; SI fp_to_uint is legalized by the type legalizer and for VI it is
; legalized by the dag legalizer and they legalize fp_to_uint differently.
; SI: v_cvt_u32_f32_e32 [[VAL:v[0-9]+]], s{{[0-9]+}}
; VI: v_cvt_i32_f32_e32 [[VAL:v[0-9]+]], s{{[0-9]+}}
; GCN: buffer_store_short [[VAL]]

View File

@ -11,21 +11,21 @@
; GCN-LABEL: {{^}}private_test:
; GCN: s_getpc_b64 s{{\[}}[[PC0_LO:[0-9]+]]:[[PC0_HI:[0-9]+]]{{\]}}
; COM: PAL OSes use fixup into .text section.
; PAL OSes use fixup into .text section.
; PAL: s_add_u32 s{{[0-9]+}}, s[[PC0_LO]], private1
; PAL: s_addc_u32 s{{[0-9]+}}, s[[PC0_HI]], 0
; COM: Non-PAL OSes use relocations.
; Non-PAL OSes use relocations.
; NOPAL: s_add_u32 s{{[0-9]+}}, s[[PC0_LO]], private1@rel32@lo+4
; NOPAL: s_addc_u32 s{{[0-9]+}}, s[[PC0_HI]], private1@rel32@hi+4
; GCN: s_getpc_b64 s{{\[}}[[PC1_LO:[0-9]+]]:[[PC1_HI:[0-9]+]]{{\]}}
; COM: PAL OSes use fixup into .text section.
; PAL OSes use fixup into .text section.
; PAL: s_add_u32 s{{[0-9]+}}, s[[PC1_LO]], private2
; PAL: s_addc_u32 s{{[0-9]+}}, s[[PC1_HI]], 0
; COM: Non-PAL OSes use relocations.
; Non-PAL OSes use relocations.
; NOPAL: s_add_u32 s{{[0-9]+}}, s[[PC1_LO]], private2@rel32@lo+4
; NOPAL: s_addc_u32 s{{[0-9]+}}, s[[PC1_HI]], private2@rel32@hi+4

View File

@ -2,7 +2,7 @@
# RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefix=GFX10 %s
#
# COM: GFX9 tests
# GFX9 tests
#
# GFX9-LABEL: name: gfx9_tbuffer_load_x_xyz
@ -780,7 +780,7 @@ body: |
#
# COM: GFX10 tests
# GFX10 tests
#
# GFX10-LABEL: name: gfx10_tbuffer_load_x_xyz

View File

@ -88,7 +88,7 @@ entry:
ret void
}
; COM: GFX9_10 can use a signed immediate byte offset
; GFX9_10 can use a signed immediate byte offset
; GCN-LABEL: {{^}}smrd6:
; SICIVI: s_add_u32 s{{[0-9]}}, s{{[0-9]}}, -4
; SICIVI: s_load_dword s{{[0-9]}}, s{{\[[0-9]+:[0-9]+\]}}, 0x0

View File

@ -2,7 +2,7 @@
; RUN: llc -O0 -verify-machineinstrs -asm-verbose=0 -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefix=SI -check-prefix=COMMON %s
; XUN: llc -O0 -verify-machineinstrs -asm-verbose=0 -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=COMMON %s
; COM: SI hits an assertion at -O0, evergreen hits a not implemented unreachable.
; SI hits an assertion at -O0, evergreen hits a not implemented unreachable.
; COMMON-LABEL: {{^}}branch_true:
define amdgpu_kernel void @branch_true(i8 addrspace(1)* nocapture %main, i32 %main_stride) #0 {

View File

@ -245,17 +245,17 @@
; V6: .eabi_attribute 6, 6
; V6: .eabi_attribute 8, 1
; COM: We assume round-to-nearest by default (matches GCC)
;; We assume round-to-nearest by default (matches GCC)
; V6-NOT: .eabi_attribute 27
; V6-NOT: .eabi_attribute 36
; V6-NOT: .eabi_attribute 42
; V6-NOT: .eabi_attribute 44
; V6-NOT: .eabi_attribute 68
; V6-NOT: .eabi_attribute 19
; COM: The default choice made by llc is for a V6 CPU without an FPU.
; COM: This is not an interesting detail, but for such CPUs, the default intention is to use
; COM: software floating-point support. The choice is not important for targets without
; COM: FPU support!
;; The default choice made by llc is for a V6 CPU without an FPU.
;; This is not an interesting detail, but for such CPUs, the default intention is to use
;; software floating-point support. The choice is not important for targets without
;; FPU support!
; V6: .eabi_attribute 20, 1
; V6: .eabi_attribute 21, 1
; V6-NOT: .eabi_attribute 22
@ -266,16 +266,16 @@
; V6: .eabi_attribute 38, 1
; V6-FAST-NOT: .eabi_attribute 19
; COM: Despite the V6 CPU having no FPU by default, we chose to flush to
; COM: positive zero here. There's no hardware support doing this, but the
; COM: fast maths software library might.
;; Despite the V6 CPU having no FPU by default, we chose to flush to
;; positive zero here. There's no hardware support doing this, but the
;; fast maths software library might.
; V6-FAST-NOT: .eabi_attribute 20
; V6-FAST-NOT: .eabi_attribute 21
; V6-FAST-NOT: .eabi_attribute 22
; V6-FAST: .eabi_attribute 23, 1
; COM: We emit 6, 12 for both v6-M and v6S-M, technically this is incorrect for
; COM: V6-M, however we don't model the OS extension so this is fine.
;; We emit 6, 12 for both v6-M and v6S-M, technically this is incorrect for
;; V6-M, however we don't model the OS extension so this is fine.
; V6M: .eabi_attribute 6, 12
; V6M: .eabi_attribute 7, 77
; V6M: .eabi_attribute 8, 0
@ -286,10 +286,10 @@
; V6M-NOT: .eabi_attribute 44
; V6M-NOT: .eabi_attribute 68
; V6M-NOT: .eabi_attribute 19
; COM: The default choice made by llc is for a V6M CPU without an FPU.
; COM: This is not an interesting detail, but for such CPUs, the default intention is to use
; COM: software floating-point support. The choice is not important for targets without
; COM: FPU support!
;; The default choice made by llc is for a V6M CPU without an FPU.
;; This is not an interesting detail, but for such CPUs, the default intention is to use
;; software floating-point support. The choice is not important for targets without
;; FPU support!
; V6M: .eabi_attribute 20, 1
; V6M: .eabi_attribute 21, 1
; V6M-NOT: .eabi_attribute 22
@ -300,9 +300,9 @@
; V6M: .eabi_attribute 38, 1
; V6M-FAST-NOT: .eabi_attribute 19
; COM: Despite the V6M CPU having no FPU by default, we chose to flush to
; COM: positive zero here. There's no hardware support doing this, but the
; COM: fast maths software library might.
;; Despite the V6M CPU having no FPU by default, we chose to flush to
;; positive zero here. There's no hardware support doing this, but the
;; fast maths software library might.
; V6M-FAST-NOT: .eabi_attribute 20
; V6M-FAST-NOT: .eabi_attribute 21
; V6M-FAST-NOT: .eabi_attribute 22
@ -319,7 +319,7 @@
; ARM1156T2F-S-NOT: .eabi_attribute 44
; ARM1156T2F-S-NOT: .eabi_attribute 68
; ARM1156T2F-S-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; ARM1156T2F-S: .eabi_attribute 20, 1
; ARM1156T2F-S: .eabi_attribute 21, 1
; ARM1156T2F-S-NOT: .eabi_attribute 22
@ -330,9 +330,9 @@
; ARM1156T2F-S: .eabi_attribute 38, 1
; ARM1156T2F-S-FAST-NOT: .eabi_attribute 19
; COM: V6 cores default to flush to positive zero (value 0). Note that value 2 is also equally
; COM: valid for this core, it's an implementation defined question as to which of 0 and 2 you
; COM: select. LLVM historically picks 0.
;; V6 cores default to flush to positive zero (value 0). Note that value 2 is also equally
;; valid for this core, it's an implementation defined question as to which of 0 and 2 you
;; select. LLVM historically picks 0.
; ARM1156T2F-S-FAST-NOT: .eabi_attribute 20
; ARM1156T2F-S-FAST-NOT: .eabi_attribute 21
; ARM1156T2F-S-FAST-NOT: .eabi_attribute 22
@ -348,10 +348,10 @@
; V7M-NOT: .eabi_attribute 44
; V7M-NOT: .eabi_attribute 68
; V7M-NOT: .eabi_attribute 19
; COM: The default choice made by llc is for a V7M CPU without an FPU.
; COM: This is not an interesting detail, but for such CPUs, the default intention is to use
; COM: software floating-point support. The choice is not important for targets without
; COM: FPU support!
;; The default choice made by llc is for a V7M CPU without an FPU.
;; This is not an interesting detail, but for such CPUs, the default intention is to use
;; software floating-point support. The choice is not important for targets without
;; FPU support!
; V7M: .eabi_attribute 20, 1
; V7M: .eabi_attribute 21, 1
; V7M-NOT: .eabi_attribute 22
@ -362,9 +362,9 @@
; V7M: .eabi_attribute 38, 1
; V7M-FAST-NOT: .eabi_attribute 19
; COM: Despite the V7M CPU having no FPU by default, we chose to flush
; COM: preserving sign. This matches what the hardware would do in the
; COM: architecture revision were to exist on the current target.
;; Despite the V7M CPU having no FPU by default, we chose to flush
;; preserving sign. This matches what the hardware would do in the
;; architecture revision were to exist on the current target.
; V7M-FAST: .eabi_attribute 20, 2
; V7M-FAST-NOT: .eabi_attribute 21
; V7M-FAST-NOT: .eabi_attribute 22
@ -378,7 +378,7 @@
; V7-NOT: .eabi_attribute 44
; V7-NOT: .eabi_attribute 68
; V7-NOT: .eabi_attribute 19
; COM: In safe-maths mode we default to an IEEE 754 compliant choice.
;; In safe-maths mode we default to an IEEE 754 compliant choice.
; V7: .eabi_attribute 20, 1
; V7: .eabi_attribute 21, 1
; V7-NOT: .eabi_attribute 22
@ -389,8 +389,8 @@
; V7: .eabi_attribute 38, 1
; V7-FAST-NOT: .eabi_attribute 19
; COM: The default CPU does have an FPU and it must be VFPv3 or better, so it flushes
; COM: denormals to zero preserving the sign.
;; The default CPU does have an FPU and it must be VFPv3 or better, so it flushes
;; denormals to zero preserving the sign.
; V7-FAST: .eabi_attribute 20, 2
; V7-FAST-NOT: .eabi_attribute 21
; V7-FAST-NOT: .eabi_attribute 22
@ -423,7 +423,7 @@
; V8: .eabi_attribute 23, 3
; V8-FAST-NOT: .eabi_attribute 19
; COM: The default does have an FPU, and for V8-A, it flushes preserving sign.
;; The default does have an FPU, and for V8-A, it flushes preserving sign.
; V8-FAST: .eabi_attribute 20, 2
; V8-FAST-NOT: .eabi_attribute 21
; V8-FAST-NOT: .eabi_attribute 22
@ -536,17 +536,17 @@
; CORTEX-A7-FPUV4: .eabi_attribute 68, 3
; Tag_ABI_FP_denormal
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A7-CHECK: .eabi_attribute 20, 1
; COM: The A7 has VFPv3 support by default, so flush preserving sign.
;; The A7 has VFPv3 support by default, so flush preserving sign.
; CORTEX-A7-CHECK-FAST: .eabi_attribute 20, 2
; CORTEX-A7-NOFPU: .eabi_attribute 20, 1
; COM: Despite there being no FPU, we chose to flush to zero preserving
; COM: sign. This matches what the hardware would do for this architecture
; COM: revision.
;; Despite there being no FPU, we chose to flush to zero preserving
;; sign. This matches what the hardware would do for this architecture
;; revision.
; CORTEX-A7-NOFPU-FAST: .eabi_attribute 20, 2
; CORTEX-A7-FPUV4: .eabi_attribute 20, 1
; COM: The VFPv4 FPU flushes preserving sign.
;; The VFPv4 FPU flushes preserving sign.
; CORTEX-A7-FPUV4-FAST: .eabi_attribute 20, 2
; Tag_ABI_FP_exceptions
@ -589,7 +589,7 @@
; CORTEX-A5-DEFAULT-NOT: .eabi_attribute 44
; CORTEX-A5-DEFAULT: .eabi_attribute 68, 1
; CORTEX-A5-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A5-DEFAULT: .eabi_attribute 20, 1
; CORTEX-A5-DEFAULT: .eabi_attribute 21, 1
; CORTEX-A5-DEFAULT-NOT: .eabi_attribute 22
@ -598,8 +598,8 @@
; CORTEX-A5-DEFAULT: .eabi_attribute 25, 1
; CORTEX-A5-DEFAULT-FAST-NOT: .eabi_attribute 19
; COM: The A5 defaults to a VFPv4 FPU, so it flushed preserving the sign when -ffast-math
; COM: is given.
;; The A5 defaults to a VFPv4 FPU, so it flushed preserving the sign when -ffast-math
;; is given.
; CORTEX-A5-DEFAULT-FAST: .eabi_attribute 20, 2
; CORTEX-A5-DEFAULT-FAST-NOT: .eabi_attribute 21
; CORTEX-A5-DEFAULT-FAST-NOT: .eabi_attribute 22
@ -613,7 +613,7 @@
; CORTEX-A5-NONEON: .fpu vfpv4-d16
; CORTEX-A5-NONEON: .eabi_attribute 42, 1
; CORTEX-A5-NONEON: .eabi_attribute 68, 1
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A5-NONEON: .eabi_attribute 20, 1
; CORTEX-A5-NONEON: .eabi_attribute 21, 1
; CORTEX-A5-NONEON-NOT: .eabi_attribute 22
@ -622,8 +622,8 @@
; CORTEX-A5-NONEON: .eabi_attribute 25, 1
; CORTEX-A5-NONEON-FAST-NOT: .eabi_attribute 19
; COM: The A5 defaults to a VFPv4 FPU, so it flushed preserving sign when -ffast-math
; COM: is given.
;; The A5 defaults to a VFPv4 FPU, so it flushed preserving sign when -ffast-math
;; is given.
; CORTEX-A5-NONEON-FAST: .eabi_attribute 20, 2
; CORTEX-A5-NONEON-FAST-NOT: .eabi_attribute 21
; CORTEX-A5-NONEON-FAST-NOT: .eabi_attribute 22
@ -638,7 +638,7 @@
; CORTEX-A5-NOFPU: .eabi_attribute 42, 1
; CORTEX-A5-NOFPU: .eabi_attribute 68, 1
; CORTEX-A5-NOFPU-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A5-NOFPU: .eabi_attribute 20, 1
; CORTEX-A5-NOFPU: .eabi_attribute 21, 1
; CORTEX-A5-NOFPU-NOT: .eabi_attribute 22
@ -647,9 +647,9 @@
; CORTEX-A5-NOFPU: .eabi_attribute 25, 1
; CORTEX-A5-NOFPU-FAST-NOT: .eabi_attribute 19
; COM: Despite there being no FPU, we chose to flush to zero preserving
; COM: sign. This matches what the hardware would do for this architecture
; COM: revision.
;; Despite there being no FPU, we chose to flush to zero preserving
;; sign. This matches what the hardware would do for this architecture
;; revision.
; CORTEX-A5-NOFPU-FAST: .eabi_attribute 20, 2
; CORTEX-A5-NOFPU-FAST-NOT: .eabi_attribute 21
; CORTEX-A5-NOFPU-FAST-NOT: .eabi_attribute 22
@ -667,7 +667,7 @@
; CORTEX-A8-SOFT-NOT: .eabi_attribute 44
; CORTEX-A8-SOFT: .eabi_attribute 68, 1
; CORTEX-A8-SOFT-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A8-SOFT: .eabi_attribute 20, 1
; CORTEX-A8-SOFT: .eabi_attribute 21, 1
; CORTEX-A8-SOFT-NOT: .eabi_attribute 22
@ -689,7 +689,7 @@
; CORTEX-A9-SOFT-NOT: .eabi_attribute 44
; CORTEX-A9-SOFT: .eabi_attribute 68, 1
; CORTEX-A9-SOFT-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A9-SOFT: .eabi_attribute 20, 1
; CORTEX-A9-SOFT: .eabi_attribute 21, 1
; CORTEX-A9-SOFT-NOT: .eabi_attribute 22
@ -701,8 +701,8 @@
; CORTEX-A8-SOFT-FAST-NOT: .eabi_attribute 19
; CORTEX-A9-SOFT-FAST-NOT: .eabi_attribute 19
; COM: The A9 defaults to a VFPv3 FPU, so it flushes preserving the sign when
; COM: -ffast-math is specified.
;; The A9 defaults to a VFPv3 FPU, so it flushes preserving the sign when
;; -ffast-math is specified.
; CORTEX-A8-SOFT-FAST: .eabi_attribute 20, 2
; CORTEX-A9-SOFT-FAST: .eabi_attribute 20, 2
; CORTEX-A5-SOFT-FAST-NOT: .eabi_attribute 21
@ -720,7 +720,7 @@
; CORTEX-A8-HARD-NOT: .eabi_attribute 42, 1
; CORTEX-A8-HARD: .eabi_attribute 68, 1
; CORTEX-A8-HARD-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A8-HARD: .eabi_attribute 20, 1
; CORTEX-A8-HARD: .eabi_attribute 21, 1
; CORTEX-A8-HARD-NOT: .eabi_attribute 22
@ -743,7 +743,7 @@
; CORTEX-A9-HARD: .eabi_attribute 42, 1
; CORTEX-A9-HARD: .eabi_attribute 68, 1
; CORTEX-A9-HARD-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A9-HARD: .eabi_attribute 20, 1
; CORTEX-A9-HARD: .eabi_attribute 21, 1
; CORTEX-A9-HARD-NOT: .eabi_attribute 22
@ -754,16 +754,16 @@
; CORTEX-A9-HARD: .eabi_attribute 38, 1
; CORTEX-A8-HARD-FAST-NOT: .eabi_attribute 19
; COM: The A8 defaults to a VFPv3 FPU, so it flushes preserving the sign when
; COM: -ffast-math is specified.
;; The A8 defaults to a VFPv3 FPU, so it flushes preserving the sign when
;; -ffast-math is specified.
; CORTEX-A8-HARD-FAST: .eabi_attribute 20, 2
; CORTEX-A8-HARD-FAST-NOT: .eabi_attribute 21
; CORTEX-A8-HARD-FAST-NOT: .eabi_attribute 22
; CORTEX-A8-HARD-FAST: .eabi_attribute 23, 1
; CORTEX-A9-HARD-FAST-NOT: .eabi_attribute 19
; COM: The A9 defaults to a VFPv3 FPU, so it flushes preserving the sign when
; COM: -ffast-math is specified.
;; The A9 defaults to a VFPv3 FPU, so it flushes preserving the sign when
;; -ffast-math is specified.
; CORTEX-A9-HARD-FAST: .eabi_attribute 20, 2
; CORTEX-A9-HARD-FAST-NOT: .eabi_attribute 21
; CORTEX-A9-HARD-FAST-NOT: .eabi_attribute 22
@ -779,7 +779,7 @@
; CORTEX-A12-DEFAULT: .eabi_attribute 44, 2
; CORTEX-A12-DEFAULT: .eabi_attribute 68, 3
; CORTEX-A12-DEFAULT-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A12-DEFAULT: .eabi_attribute 20, 1
; CORTEX-A12-DEFAULT: .eabi_attribute 21, 1
; CORTEX-A12-DEFAULT-NOT: .eabi_attribute 22
@ -788,8 +788,8 @@
; CORTEX-A12-DEFAULT: .eabi_attribute 25, 1
; CORTEX-A12-DEFAULT-FAST-NOT: .eabi_attribute 19
; COM: The A12 defaults to a VFPv3 FPU, so it flushes preserving the sign when
; COM: -ffast-math is specified.
;; The A12 defaults to a VFPv3 FPU, so it flushes preserving the sign when
;; -ffast-math is specified.
; CORTEX-A12-DEFAULT-FAST: .eabi_attribute 20, 2
; CORTEX-A12-HARD-FAST-NOT: .eabi_attribute 21
; CORTEX-A12-HARD-FAST-NOT: .eabi_attribute 22
@ -805,7 +805,7 @@
; CORTEX-A12-NOFPU: .eabi_attribute 44, 2
; CORTEX-A12-NOFPU: .eabi_attribute 68, 3
; CORTEX-A12-NOFPU-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A12-NOFPU: .eabi_attribute 20, 1
; CORTEX-A12-NOFPU: .eabi_attribute 21, 1
; CORTEX-A12-NOFPU-NOT: .eabi_attribute 22
@ -814,9 +814,9 @@
; CORTEX-A12-NOFPU: .eabi_attribute 25, 1
; CORTEX-A12-NOFPU-FAST-NOT: .eabi_attribute 19
; COM: Despite there being no FPU, we chose to flush to zero preserving
; COM: sign. This matches what the hardware would do for this architecture
; COM: revision.
;; Despite there being no FPU, we chose to flush to zero preserving
;; sign. This matches what the hardware would do for this architecture
;; revision.
; CORTEX-A12-NOFPU-FAST: .eabi_attribute 20, 2
; CORTEX-A12-NOFPU-FAST-NOT: .eabi_attribute 21
; CORTEX-A12-NOFPU-FAST-NOT: .eabi_attribute 22
@ -834,7 +834,7 @@
; CORTEX-A15: .eabi_attribute 44, 2
; CORTEX-A15: .eabi_attribute 68, 3
; CORTEX-A15-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A15: .eabi_attribute 20, 1
; CORTEX-A15: .eabi_attribute 21, 1
; CORTEX-A15-NOT: .eabi_attribute 22
@ -845,8 +845,8 @@
; CORTEX-A15: .eabi_attribute 38, 1
; CORTEX-A15-FAST-NOT: .eabi_attribute 19
; COM: The A15 defaults to a VFPv3 FPU, so it flushes preserving the sign when
; COM: -ffast-math is specified.
;; The A15 defaults to a VFPv3 FPU, so it flushes preserving the sign when
;; -ffast-math is specified.
; CORTEX-A15-FAST: .eabi_attribute 20, 2
; CORTEX-A15-FAST-NOT: .eabi_attribute 21
; CORTEX-A15-FAST-NOT: .eabi_attribute 22
@ -862,7 +862,7 @@
; CORTEX-A17-DEFAULT: .eabi_attribute 44, 2
; CORTEX-A17-DEFAULT: .eabi_attribute 68, 3
; CORTEX-A17-DEFAULT-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A17-DEFAULT: .eabi_attribute 20, 1
; CORTEX-A17-DEFAULT: .eabi_attribute 21, 1
; CORTEX-A17-DEFAULT-NOT: .eabi_attribute 22
@ -871,8 +871,8 @@
; CORTEX-A17-DEFAULT: .eabi_attribute 25, 1
; CORTEX-A17-FAST-NOT: .eabi_attribute 19
; COM: The A17 defaults to a VFPv3 FPU, so it flushes preserving the sign when
; COM: -ffast-math is specified.
;; The A17 defaults to a VFPv3 FPU, so it flushes preserving the sign when
;; -ffast-math is specified.
; CORTEX-A17-FAST: .eabi_attribute 20, 2
; CORTEX-A17-FAST-NOT: .eabi_attribute 21
; CORTEX-A17-FAST-NOT: .eabi_attribute 22
@ -888,7 +888,7 @@
; CORTEX-A17-NOFPU: .eabi_attribute 44, 2
; CORTEX-A17-NOFPU: .eabi_attribute 68, 3
; CORTEX-A17-NOFPU-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A17-NOFPU: .eabi_attribute 20, 1
; CORTEX-A17-NOFPU: .eabi_attribute 21, 1
; CORTEX-A17-NOFPU-NOT: .eabi_attribute 22
@ -897,9 +897,9 @@
; CORTEX-A17-NOFPU: .eabi_attribute 25, 1
; CORTEX-A17-NOFPU-NOT: .eabi_attribute 19
; COM: Despite there being no FPU, we chose to flush to zero preserving
; COM: sign. This matches what the hardware would do for this architecture
; COM: revision.
;; Despite there being no FPU, we chose to flush to zero preserving
;; sign. This matches what the hardware would do for this architecture
;; revision.
; CORTEX-A17-NOFPU-FAST: .eabi_attribute 20, 2
; CORTEX-A17-NOFPU-FAST-NOT: .eabi_attribute 21
; CORTEX-A17-NOFPU-FAST-NOT: .eabi_attribute 22
@ -923,7 +923,7 @@
; CORTEX-M0-NOT: .eabi_attribute 44
; CORTEX-M0-NOT: .eabi_attribute 68
; CORTEX-M0-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M0: .eabi_attribute 20, 1
; CORTEX-M0: .eabi_attribute 21, 1
; CORTEX-M0-NOT: .eabi_attribute 22
@ -934,11 +934,11 @@
; CORTEX-M0: .eabi_attribute 38, 1
; CORTEX-M0-FAST-NOT: .eabi_attribute 19
; COM: Despite the M0 CPU having no FPU in this scenario, we chose to
; COM: flush to positive zero here. There's no hardware support doing
; COM: this, but the fast maths software library might and such behaviour
; COM: would match hardware support on this architecture revision if it
; COM: existed.
;; Despite the M0 CPU having no FPU in this scenario, we chose to
;; flush to positive zero here. There's no hardware support doing
;; this, but the fast maths software library might and such behaviour
;; would match hardware support on this architecture revision if it
;; existed.
; CORTEX-M0-FAST-NOT: .eabi_attribute 20
; CORTEX-M0-FAST-NOT: .eabi_attribute 21
; CORTEX-M0-FAST-NOT: .eabi_attribute 22
@ -955,7 +955,7 @@
; CORTEX-M0PLUS-NOT: .eabi_attribute 44
; CORTEX-M0PLUS-NOT: .eabi_attribute 68
; CORTEX-M0PLUS-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M0PLUS: .eabi_attribute 20, 1
; CORTEX-M0PLUS: .eabi_attribute 21, 1
; CORTEX-M0PLUS-NOT: .eabi_attribute 22
@ -966,11 +966,11 @@
; CORTEX-M0PLUS: .eabi_attribute 38, 1
; CORTEX-M0PLUS-FAST-NOT: .eabi_attribute 19
; COM: Despite the M0+ CPU having no FPU in this scenario, we chose to
; COM: flush to positive zero here. There's no hardware support doing
; COM: this, but the fast maths software library might and such behaviour
; COM: would match hardware support on this architecture revision if it
; COM: existed.
;; Despite the M0+ CPU having no FPU in this scenario, we chose to
;; flush to positive zero here. There's no hardware support doing
;; this, but the fast maths software library might and such behaviour
;; would match hardware support on this architecture revision if it
;; existed.
; CORTEX-M0PLUS-FAST-NOT: .eabi_attribute 20
; CORTEX-M0PLUS-FAST-NOT: .eabi_attribute 21
; CORTEX-M0PLUS-FAST-NOT: .eabi_attribute 22
@ -987,7 +987,7 @@
; CORTEX-M1-NOT: .eabi_attribute 44
; CORTEX-M1-NOT: .eabi_attribute 68
; CORTEX-M1-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M1: .eabi_attribute 20, 1
; CORTEX-M1: .eabi_attribute 21, 1
; CORTEX-M1-NOT: .eabi_attribute 22
@ -998,11 +998,11 @@
; CORTEX-M1: .eabi_attribute 38, 1
; CORTEX-M1-FAST-NOT: .eabi_attribute 19
; COM: Despite the M1 CPU having no FPU in this scenario, we chose to
; COM: flush to positive zero here. There's no hardware support doing
; COM: this, but the fast maths software library might and such behaviour
; COM: would match hardware support on this architecture revision if it
; COM: existed.
;; Despite the M1 CPU having no FPU in this scenario, we chose to
;; flush to positive zero here. There's no hardware support doing
;; this, but the fast maths software library might and such behaviour
;; would match hardware support on this architecture revision if it
;; existed.
; CORTEX-M1-FAST-NOT: .eabi_attribute 20
; CORTEX-M1-FAST-NOT: .eabi_attribute 21
; CORTEX-M1-FAST-NOT: .eabi_attribute 22
@ -1018,7 +1018,7 @@
; SC000-NOT: .eabi_attribute 44
; SC000-NOT: .eabi_attribute 68
; SC000-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; SC000: .eabi_attribute 20, 1
; SC000: .eabi_attribute 21, 1
; SC000-NOT: .eabi_attribute 22
@ -1029,11 +1029,11 @@
; SC000: .eabi_attribute 38, 1
; SC000-FAST-NOT: .eabi_attribute 19
; COM: Despite the SC000 CPU having no FPU in this scenario, we chose to
; COM: flush to positive zero here. There's no hardware support doing
; COM: this, but the fast maths software library might and such behaviour
; COM: would match hardware support on this architecture revision if it
; COM: existed.
;; Despite the SC000 CPU having no FPU in this scenario, we chose to
;; flush to positive zero here. There's no hardware support doing
;; this, but the fast maths software library might and such behaviour
;; would match hardware support on this architecture revision if it
;; existed.
; SC000-FAST-NOT: .eabi_attribute 20
; SC000-FAST-NOT: .eabi_attribute 21
; SC000-FAST-NOT: .eabi_attribute 22
@ -1050,7 +1050,7 @@
; CORTEX-M3-NOT: .eabi_attribute 44
; CORTEX-M3-NOT: .eabi_attribute 68
; CORTEX-M3-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M3: .eabi_attribute 20, 1
; CORTEX-M3: .eabi_attribute 21, 1
; CORTEX-M3-NOT: .eabi_attribute 22
@ -1061,9 +1061,9 @@
; CORTEX-M3: .eabi_attribute 38, 1
; CORTEX-M3-FAST-NOT: .eabi_attribute 19
; COM: Despite there being no FPU, we chose to flush to zero preserving
; COM: sign. This matches what the hardware would do for this architecture
; COM: revision.
;; Despite there being no FPU, we chose to flush to zero preserving
;; sign. This matches what the hardware would do for this architecture
;; revision.
; CORTEX-M3-FAST: .eabi_attribute 20, 2
; CORTEX-M3-FAST-NOT: .eabi_attribute 21
; CORTEX-M3-FAST-NOT: .eabi_attribute 22
@ -1080,7 +1080,7 @@
; SC300-NOT: .eabi_attribute 44
; SC300-NOT: .eabi_attribute 68
; SC300-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; SC300: .eabi_attribute 20, 1
; SC300: .eabi_attribute 21, 1
; SC300-NOT: .eabi_attribute 22
@ -1091,9 +1091,9 @@
; SC300: .eabi_attribute 38, 1
; SC300-FAST-NOT: .eabi_attribute 19
; COM: Despite there being no FPU, we chose to flush to zero preserving
; COM: sign. This matches what the hardware would do for this architecture
; COM: revision.
;; Despite there being no FPU, we chose to flush to zero preserving
;; sign. This matches what the hardware would do for this architecture
;; revision.
; SC300-FAST: .eabi_attribute 20, 2
; SC300-FAST-NOT: .eabi_attribute 21
; SC300-FAST-NOT: .eabi_attribute 22
@ -1111,7 +1111,7 @@
; CORTEX-M4-SOFT-NOT: .eabi_attribute 44
; CORTEX-M4-SOFT-NOT: .eabi_attribute 68
; CORTEX-M4-SOFT-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M4-SOFT: .eabi_attribute 20, 1
; CORTEX-M4-SOFT: .eabi_attribute 21, 1
; CORTEX-M4-SOFT-NOT: .eabi_attribute 22
@ -1122,8 +1122,8 @@
; CORTEX-M4-SOFT: .eabi_attribute 38, 1
; CORTEX-M4-SOFT-FAST-NOT: .eabi_attribute 19
; COM: The M4 defaults to a VFPv4 FPU, so it flushes preserving the sign when
; COM: -ffast-math is specified.
;; The M4 defaults to a VFPv4 FPU, so it flushes preserving the sign when
;; -ffast-math is specified.
; CORTEX-M4-SOFT-FAST: .eabi_attribute 20, 2
; CORTEX-M4-SOFT-FAST-NOT: .eabi_attribute 21
; CORTEX-M4-SOFT-FAST-NOT: .eabi_attribute 22
@ -1141,7 +1141,7 @@
; CORTEX-M4-HARD-NOT: .eabi_attribute 44
; CORTEX-M4-HARD-NOT: .eabi_attribute 68
; CORTEX-M4-HARD-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M4-HARD: .eabi_attribute 20, 1
; CORTEX-M4-HARD: .eabi_attribute 21, 1
; CORTEX-M4-HARD-NOT: .eabi_attribute 22
@ -1152,8 +1152,8 @@
; CORTEX-M4-HARD: .eabi_attribute 38, 1
; CORTEX-M4-HARD-FAST-NOT: .eabi_attribute 19
; COM: The M4 defaults to a VFPv4 FPU, so it flushes preserving the sign when
; COM: -ffast-math is specified.
;; The M4 defaults to a VFPv4 FPU, so it flushes preserving the sign when
;; -ffast-math is specified.
; CORTEX-M4-HARD-FAST: .eabi_attribute 20, 2
; CORTEX-M4-HARD-FAST-NOT: .eabi_attribute 21
; CORTEX-M4-HARD-FAST-NOT: .eabi_attribute 22
@ -1174,7 +1174,7 @@
; CORTEX-M7-NOT: .eabi_attribute 44
; CORTEX-M7: .eabi_attribute 17, 1
; CORTEX-M7-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M7: .eabi_attribute 20, 1
; CORTEX-M7: .eabi_attribute 21, 1
; CORTEX-M7-NOT: .eabi_attribute 22
@ -1185,11 +1185,11 @@
; CORTEX-M7: .eabi_attribute 14, 0
; CORTEX-M7-NOFPU-FAST-NOT: .eabi_attribute 19
; COM: The M7 has the ARMv8 FP unit, which always flushes preserving sign.
;; The M7 has the ARMv8 FP unit, which always flushes preserving sign.
; CORTEX-M7-FAST: .eabi_attribute 20, 2
; COM: Despite there being no FPU, we chose to flush to zero preserving
; COM: sign. This matches what the hardware would do for this architecture
; COM: revision.
;; Despite there being no FPU, we chose to flush to zero preserving
;; sign. This matches what the hardware would do for this architecture
;; revision.
; CORTEX-M7-NOFPU-FAST: .eabi_attribute 20, 2
; CORTEX-M7-NOFPU-FAST-NOT: .eabi_attribute 21
; CORTEX-M7-NOFPU-FAST-NOT: .eabi_attribute 22
@ -1206,7 +1206,7 @@
; CORTEX-R4-NOT: .eabi_attribute 44
; CORTEX-R4-NOT: .eabi_attribute 68
; CORTEX-R4-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-R4: .eabi_attribute 20, 1
; CORTEX-R4: .eabi_attribute 21, 1
; CORTEX-R4-NOT: .eabi_attribute 22
@ -1228,7 +1228,7 @@
; CORTEX-R4F-NOT: .eabi_attribute 44
; CORTEX-R4F-NOT: .eabi_attribute 68
; CORTEX-R4F-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-R4F: .eabi_attribute 20, 1
; CORTEX-R4F: .eabi_attribute 21, 1
; CORTEX-R4F-NOT: .eabi_attribute 22
@ -1250,7 +1250,7 @@
; CORTEX-R5-NOT: .eabi_attribute 42
; CORTEX-R5-NOT: .eabi_attribute 68
; CORTEX-R5-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-R5: .eabi_attribute 20, 1
; CORTEX-R5: .eabi_attribute 21, 1
; CORTEX-R5-NOT: .eabi_attribute 22
@ -1261,7 +1261,7 @@
; CORTEX-R5: .eabi_attribute 38, 1
; CORTEX-R5-FAST-NOT: .eabi_attribute 19
; COM: The R5 has the VFPv3 FP unit, which always flushes preserving sign.
;; The R5 has the VFPv3 FP unit, which always flushes preserving sign.
; CORTEX-R5-FAST: .eabi_attribute 20, 2
; CORTEX-R5-FAST-NOT: .eabi_attribute 21
; CORTEX-R5-FAST-NOT: .eabi_attribute 22
@ -1278,7 +1278,7 @@
; CORTEX-R7: .eabi_attribute 44, 2
; CORTEX-R7-NOT: .eabi_attribute 68
; CORTEX-R7-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-R7: .eabi_attribute 20, 1
; CORTEX-R7: .eabi_attribute 21, 1
; CORTEX-R7-NOT: .eabi_attribute 22
@ -1289,7 +1289,7 @@
; CORTEX-R7: .eabi_attribute 38, 1
; CORTEX-R7-FAST-NOT: .eabi_attribute 19
; COM: The R7 has the VFPv3 FP unit, which always flushes preserving sign.
;; The R7 has the VFPv3 FP unit, which always flushes preserving sign.
; CORTEX-R7-FAST: .eabi_attribute 20, 2
; CORTEX-R7-FAST-NOT: .eabi_attribute 21
; CORTEX-R7-FAST-NOT: .eabi_attribute 22
@ -1306,7 +1306,7 @@
; CORTEX-R8: .eabi_attribute 44, 2
; CORTEX-R8-NOT: .eabi_attribute 68
; CORTEX-R8-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-R8: .eabi_attribute 20, 1
; CORTEX-R8: .eabi_attribute 21, 1
; CORTEX-R8-NOT: .eabi_attribute 22
@ -1317,7 +1317,7 @@
; CORTEX-R8: .eabi_attribute 38, 1
; CORTEX-R8-FAST-NOT: .eabi_attribute 19
; COM: The R8 has the VFPv3 FP unit, which always flushes preserving sign.
;; The R8 has the VFPv3 FP unit, which always flushes preserving sign.
; CORTEX-R8-FAST: .eabi_attribute 20, 2
; CORTEX-R8-FAST-NOT: .eabi_attribute 21
; CORTEX-R8-FAST-NOT: .eabi_attribute 22
@ -1336,7 +1336,7 @@
; CORTEX-A32-NOT: .eabi_attribute 44
; CORTEX-A32: .eabi_attribute 68, 3
; CORTEX-A32-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A32: .eabi_attribute 20, 1
; CORTEX-A32: .eabi_attribute 21, 1
; CORTEX-A32-NOT: .eabi_attribute 22
@ -1347,7 +1347,7 @@
; CORTEX-A32: .eabi_attribute 38, 1
; CORTEX-A32-FAST-NOT: .eabi_attribute 19
; COM: The A32 has the ARMv8 FP unit, which always flushes preserving sign.
;; The A32 has the ARMv8 FP unit, which always flushes preserving sign.
; CORTEX-A32-FAST: .eabi_attribute 20, 2
; CORTEX-A32-FAST-NOT: .eabi_attribute 21
; CORTEX-A32-FAST-NOT: .eabi_attribute 22
@ -1362,7 +1362,7 @@
; CORTEX-M23: .eabi_attribute 34, 0
; CORTEX-M23-NOT: .eabi_attribute 44
; CORTEX-M23: .eabi_attribute 17, 1
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M23-NOT: .eabi_attribute 19
; CORTEX-M23: .eabi_attribute 20, 1
; CORTEX-M23: .eabi_attribute 21, 1
@ -1385,7 +1385,7 @@
; CORTEX-M33: .eabi_attribute 46, 1
; CORTEX-M33: .eabi_attribute 34, 1
; CORTEX-M33: .eabi_attribute 17, 1
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-M23-NOT: .eabi_attribute 19
; CORTEX-M33: .eabi_attribute 20, 1
; CORTEX-M33: .eabi_attribute 21, 1
@ -1436,7 +1436,7 @@
; CORTEX-A35-NOT: .eabi_attribute 44
; CORTEX-A35: .eabi_attribute 68, 3
; CORTEX-A35-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A35: .eabi_attribute 20, 1
; CORTEX-A35: .eabi_attribute 21, 1
; CORTEX-A35-NOT: .eabi_attribute 22
@ -1447,7 +1447,7 @@
; CORTEX-A35: .eabi_attribute 38, 1
; CORTEX-A35-FAST-NOT: .eabi_attribute 19
; COM: The A35 has the ARMv8 FP unit, which always flushes preserving sign.
;; The A35 has the ARMv8 FP unit, which always flushes preserving sign.
; CORTEX-A35-FAST: .eabi_attribute 20, 2
; CORTEX-A35-FAST-NOT: .eabi_attribute 21
; CORTEX-A35-FAST-NOT: .eabi_attribute 22
@ -1466,7 +1466,7 @@
; CORTEX-A53-NOT: .eabi_attribute 44
; CORTEX-A53: .eabi_attribute 68, 3
; CORTEX-A53-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A53: .eabi_attribute 20, 1
; CORTEX-A53: .eabi_attribute 21, 1
; CORTEX-A53-NOT: .eabi_attribute 22
@ -1477,7 +1477,7 @@
; CORTEX-A53: .eabi_attribute 38, 1
; CORTEX-A53-FAST-NOT: .eabi_attribute 19
; COM: The A53 has the ARMv8 FP unit, which always flushes preserving sign.
;; The A53 has the ARMv8 FP unit, which always flushes preserving sign.
; CORTEX-A53-FAST: .eabi_attribute 20, 2
; CORTEX-A53-FAST-NOT: .eabi_attribute 21
; CORTEX-A53-FAST-NOT: .eabi_attribute 22
@ -1496,7 +1496,7 @@
; CORTEX-A57-NOT: .eabi_attribute 44
; CORTEX-A57: .eabi_attribute 68, 3
; CORTEX-A57-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A57: .eabi_attribute 20, 1
; CORTEX-A57: .eabi_attribute 21, 1
; CORTEX-A57-NOT: .eabi_attribute 22
@ -1507,7 +1507,7 @@
; CORTEX-A57: .eabi_attribute 38, 1
; CORTEX-A57-FAST-NOT: .eabi_attribute 19
; COM: The A57 has the ARMv8 FP unit, which always flushes preserving sign.
;; The A57 has the ARMv8 FP unit, which always flushes preserving sign.
; CORTEX-A57-FAST: .eabi_attribute 20, 2
; CORTEX-A57-FAST-NOT: .eabi_attribute 21
; CORTEX-A57-FAST-NOT: .eabi_attribute 22
@ -1526,7 +1526,7 @@
; CORTEX-A72-NOT: .eabi_attribute 44
; CORTEX-A72: .eabi_attribute 68, 3
; CORTEX-A72-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A72: .eabi_attribute 20, 1
; CORTEX-A72: .eabi_attribute 21, 1
; CORTEX-A72-NOT: .eabi_attribute 22
@ -1537,7 +1537,7 @@
; CORTEX-A72: .eabi_attribute 38, 1
; CORTEX-A72-FAST-NOT: .eabi_attribute 19
; COM: The A72 has the ARMv8 FP unit, which always flushes preserving sign.
;; The A72 has the ARMv8 FP unit, which always flushes preserving sign.
; CORTEX-A72-FAST: .eabi_attribute 20, 2
; CORTEX-A72-FAST-NOT: .eabi_attribute 21
; CORTEX-A72-FAST-NOT: .eabi_attribute 22
@ -1556,7 +1556,7 @@
; CORTEX-A73-NOT: .eabi_attribute 44
; CORTEX-A73: .eabi_attribute 68, 3
; CORTEX-A73-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; CORTEX-A73: .eabi_attribute 20, 1
; CORTEX-A73: .eabi_attribute 21, 1
; CORTEX-A73-NOT: .eabi_attribute 22
@ -1568,7 +1568,7 @@
; CORTEX-A73: .eabi_attribute 14, 0
; EXYNOS-FAST-NOT: .eabi_attribute 19
; COM: The Exynos processors have the ARMv8 FP unit, which always flushes preserving sign.
;; The Exynos processors have the ARMv8 FP unit, which always flushes preserving sign.
; EXYNOS-FAST: .eabi_attribute 20, 2
; EXYNOS-FAST-NOT: .eabi_attribute 21
; EXYNOS-FAST-NOT: .eabi_attribute 22
@ -1587,7 +1587,7 @@
; EXYNOS-M3-NOT: .eabi_attribute 44
; EXYNOS-M3: .eabi_attribute 68, 3
; EXYNOS-M3-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; EXYNOS-M3: .eabi_attribute 20, 1
; EXYNOS-M3: .eabi_attribute 21, 1
; EXYNOS-M3-NOT: .eabi_attribute 22
@ -1610,7 +1610,7 @@
; EXYNOS-M4-NOT: .eabi_attribute 44
; EXYNOS-M4: .eabi_attribute 68, 3
; EXYNOS-M4-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; EXYNOS-M4: .eabi_attribute 20, 1
; EXYNOS-M4: .eabi_attribute 21, 1
; EXYNOS-M4-NOT: .eabi_attribute 22
@ -1633,7 +1633,7 @@
; EXYNOS-M5-NOT: .eabi_attribute 44
; EXYNOS-M5: .eabi_attribute 68, 3
; EXYNOS-M5-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; EXYNOS-M5: .eabi_attribute 20, 1
; EXYNOS-M5: .eabi_attribute 21, 1
; EXYNOS-M5-NOT: .eabi_attribute 22
@ -1661,7 +1661,7 @@
; GENERIC-ARMV8_1-A-NOT: .eabi_attribute 44
; GENERIC-ARMV8_1-A: .eabi_attribute 68, 3
; GENERIC-ARMV8_1-A-NOT: .eabi_attribute 19
; COM: We default to IEEE 754 compliance
;; We default to IEEE 754 compliance
; GENERIC-ARMV8_1-A: .eabi_attribute 20, 1
; GENERIC-ARMV8_1-A: .eabi_attribute 21, 1
; GENERIC-ARMV8_1-A-NOT: .eabi_attribute 22
@ -1672,7 +1672,7 @@
; GENERIC-ARMV8_1-A: .eabi_attribute 38, 1
; GENERIC-ARMV8_1-A-FAST-NOT: .eabi_attribute 19
; COM: GENERIC-ARMV8_1-A has the ARMv8 FP unit, which always flushes preserving sign.
;; GENERIC-ARMV8_1-A has the ARMv8 FP unit, which always flushes preserving sign.
; GENERIC-ARMV8_1-A-FAST: .eabi_attribute 20, 2
; GENERIC-ARMV8_1-A-FAST-NOT: .eabi_attribute 21
; GENERIC-ARMV8_1-A-FAST-NOT: .eabi_attribute 22

View File

@ -12,24 +12,24 @@
; floating-point helper functions to always use the base AAPCS (soft-float)
; calling convention.
; COM: In this test we cover the following configurations:
; COM: CHECK-SOFT -mfloat-abi=soft
; COM: * expect no use of floating point instructions
; COM: * expect to use __aeabi_ helper function in each function
; COM: CHECK-SOFTFP -mfloat-abi=softfp
; COM: * all functions use base AAPCS
; COM: * floating point instructions permitted, so __aeabi_ helpers only
; COM: expected when there is no available instruction.
; COM: CHECK-HARDFP-SP -mfloat-abi=hardfp (single precision instructions)
; COM: * all non Runtime ABI helper functions use AAPCS VFP
; COM: * floating point instructions permitted, so __aeabi_ helpers only
; COM: expected when there is no available instruction.
; COM: CHECK-HARDFP-DP -mfloat-abi=hardfp (double precision instructions)
; COM: CHECK-HARDFP-SPONLY -mfloat-abi=hardfp (double precision but single
; COM: precision only FPU)
; COM: * as CHECK-HARDFP-SP, but we split up the double precision helper
; COM: functions so we can test a single precision only FPU, which has to use
; COM: helper function for all double precision operations.
; In this test we cover the following configurations:
; CHECK-SOFT -mfloat-abi=soft
; * expect no use of floating point instructions
; * expect to use __aeabi_ helper function in each function
; CHECK-SOFTFP -mfloat-abi=softfp
; * all functions use base AAPCS
; * floating point instructions permitted, so __aeabi_ helpers only
; expected when there is no available instruction.
; CHECK-HARDFP-SP -mfloat-abi=hardfp (single precision instructions)
; * all non Runtime ABI helper functions use AAPCS VFP
; * floating point instructions permitted, so __aeabi_ helpers only
; expected when there is no available instruction.
; CHECK-HARDFP-DP -mfloat-abi=hardfp (double precision instructions)
; CHECK-HARDFP-SPONLY -mfloat-abi=hardfp (double precision but single
; precision only FPU)
; * as CHECK-HARDFP-SP, but we split up the double precision helper
; functions so we can test a single precision only FPU, which has to use
; helper function for all double precision operations.
; In all cases we must use base AAPCS when calling a helper function from
; section 4.1.2.

View File

@ -181,7 +181,7 @@ entry:
define void @t8(i32 %a) {
entry:
; COM: ARM scheduler emits icmp/zext before both calls, so isn't relevant
; ARM scheduler emits icmp/zext before both calls, so isn't relevant
; ARMT2-LABEL: t8:
; ARMT2: bl t7
@ -214,7 +214,7 @@ entry:
define void @t9(i8* %a, i8 %b) {
entry:
; COM: ARM scheduler emits icmp/zext before both calls, so isn't relevant
; ARM scheduler emits icmp/zext before both calls, so isn't relevant
; ARMT2-LABEL: t9:
; ARMT2: bl f

View File

@ -12,17 +12,17 @@
;RUN: cat %t | FileCheck %s --check-prefix=T1POST
;RUN: cat %t | FileCheck %s --check-prefix=V8MBASE
; COM: This file contains auto generated tests for the lowering of passing structs
; COM: byval in the arm backend. We have tests for both packed and unpacked
; COM: structs at varying alignments. Each test is run for arm, thumb2 and thumb1.
; COM: We check for the strings in the generated object code using llvm-objdump
; COM: because it provides better assurance that we are generating instructions
; COM: for the correct architecture. Otherwise we could accidentally generate an
; COM: ARM instruction for THUMB1 and wouldn't detect it because the assembly
; COM: code representation is the same, but the object code would be generated
; COM: incorrectly. For each test we check for the label, a load instruction of the
; COM: correct form, a branch if it will be generated with a loop, and the leftover
; COM: cleanup if the number of bytes does not divide evenly by the store size
;This file contains auto generated tests for the lowering of passing structs
;byval in the arm backend. We have tests for both packed and unpacked
;structs at varying alignments. Each test is run for arm, thumb2 and thumb1.
;We check for the strings in the generated object code using llvm-objdump
;because it provides better assurance that we are generating instructions
;for the correct architecture. Otherwise we could accidentally generate an
;ARM instruction for THUMB1 and wouldn't detect it because the assembly
;code representation is the same, but the object code would be generated
;incorrectly. For each test we check for the label, a load instruction of the
;correct form, a branch if it will be generated with a loop, and the leftover
;cleanup if the number of bytes does not divide evenly by the store size
%struct.A = type <{ [ 10 x i32 ] }> ; 40 bytes
declare void @use_A(%struct.A* byval)

View File

@ -46,14 +46,14 @@ entry:
}
; ALL-LABEL: double_args:
; COM: We won't test the way the global address is calculated in this test. This is
; COM: just to get the register number for the other checks.
; We won't test the way the global address is calculated in this test. This is
; just to get the register number for the other checks.
; SYM32-DAG: addiu [[R2:\$[0-9]+]], ${{[0-9]+}}, %lo(doubles)
; SYM64-DAG: daddiu [[R2:\$[0-9]]], ${{[0-9]+}}, %lo(doubles)
; COM: The first four arguments are the same in O32/N32/N64.
; COM: The first argument is floating point but soft-float is enabled so floating
; COM: point registers are not used.
; The first four arguments are the same in O32/N32/N64.
; The first argument is floating point but soft-float is enabled so floating
; point registers are not used.
; O32-DAG: sw $4, 8([[R2]])
; O32-DAG: sw $5, 12([[R2]])
; NEW-DAG: sd $4, 8([[R2]])
@ -62,7 +62,7 @@ entry:
; O32-DAG: sw $7, 20([[R2]])
; NEW-DAG: sd $5, 16([[R2]])
; COM: O32 has run out of argument registers and starts using the stack
; O32 has run out of argument registers and starts using the stack
; O32-DAG: lw [[R3:\$([0-9]+|gp)]], 16($sp)
; O32-DAG: lw [[R4:\$([0-9]+|gp)]], 20($sp)
; O32-DAG: sw [[R3]], 24([[R2]])
@ -134,18 +134,18 @@ entry:
; SYM32-DAG: addiu [[R2:\$[0-9]+]], ${{[0-9]+}}, %lo(floats)
; SYM64-DAG: daddiu [[R2:\$[0-9]]], ${{[0-9]+}}, %lo(floats)
; COM: The first four arguments are the same in O32/N32/N64.
; COM: The first argument is floating point but soft-float is enabled so floating
; COM: point registers are not used.
; COM: MD00305 and GCC disagree on this one. MD00305 says that floats are treated
; COM: as 8-byte aligned and occupy two slots on O32. GCC is treating them as 4-byte
; COM: aligned and occupying one slot. We'll use GCC's definition.
; The first four arguments are the same in O32/N32/N64.
; The first argument is floating point but soft-float is enabled so floating
; point registers are not used.
; MD00305 and GCC disagree on this one. MD00305 says that floats are treated
; as 8-byte aligned and occupy two slots on O32. GCC is treating them as 4-byte
; aligned and occupying one slot. We'll use GCC's definition.
; ALL-DAG: sw $4, 4([[R2]])
; ALL-DAG: sw $5, 8([[R2]])
; ALL-DAG: sw $6, 12([[R2]])
; ALL-DAG: sw $7, 16([[R2]])
; COM: O32 has run out of argument registers and starts using the stack
; O32 has run out of argument registers and starts using the stack
; O32-DAG: lw [[R3:\$[0-9]+]], 16($sp)
; O32-DAG: sw [[R3]], 20([[R2]])
; NEW-DAG: sw $8, 20([[R2]])
@ -162,7 +162,7 @@ entry:
; O32-DAG: sw [[R3]], 32([[R2]])
; NEW-DAG: sw $11, 32([[R2]])
; COM: N32/N64 have run out of registers and start using the stack too
; N32/N64 have run out of registers and start using the stack too
; O32-DAG: lw [[R3:\$[0-9]+]], 32($sp)
; O32-DAG: sw [[R3]], 36([[R2]])
; NEW-DAG: lw [[R3:\$[0-9]+]], 0($sp)
@ -185,11 +185,11 @@ entry:
; SYM32-DAG: addiu [[R2:\$[0-9]+]], ${{[0-9]+}}, %lo(doubles)
; SYM64-DAG: daddiu [[R2:\$[0-9]]], ${{[0-9]+}}, %lo(doubles)
; COM: The first four arguments are the same in O32/N32/N64.
; COM: The first argument isn't floating point so floating point registers are not
; COM: used.
; COM: The second slot is insufficiently aligned for double on O32 so it is skipped.
; COM: Also, double occupies two slots on O32 and only one for N32/N64.
; The first four arguments are the same in O32/N32/N64.
; The first argument isn't floating point so floating point registers are not
; used.
; The second slot is insufficiently aligned for double on O32 so it is skipped.
; Also, double occupies two slots on O32 and only one for N32/N64.
; ALL-DAG: sb $4, 1([[R1]])
; O32-DAG: sw $6, 8([[R2]])
; O32-DAG: sw $7, 12([[R2]])
@ -213,11 +213,11 @@ entry:
; SYM64-DAG: daddiu [[R2:\$[0-9]]], ${{[0-9]+}}, %lo(floats)
; COM: The first four arguments are the same in O32/N32/N64.
; COM: The first argument isn't floating point so floating point registers are not
; COM: used.
; COM: MD00305 and GCC disagree on this one. MD00305 says that floats are treated
; COM: as 8-byte aligned and occupy two slots on O32. GCC is treating them as 4-byte
; COM: aligned and occupying one slot. We'll use GCC's definition.
; The first four arguments are the same in O32/N32/N64.
; The first argument isn't floating point so floating point registers are not
; used.
; MD00305 and GCC disagree on this one. MD00305 says that floats are treated
; as 8-byte aligned and occupy two slots on O32. GCC is treating them as 4-byte
; aligned and occupying one slot. We'll use GCC's definition.
; ALL-DAG: sb $4, 1([[R1]])
; ALL-DAG: sw $5, 4([[R2]])

View File

@ -18,14 +18,14 @@
; RUN: llc -march=mips64el -relocation-model=static -target-abi n64 < %s \
; RUN: | FileCheck --check-prefixes=ALL,SYM64,N64,NEW,NEWLE %s
; COM: Test the effect of varargs on floating point types in the non-variable part
; COM: of the argument list as specified by section 2 of the MIPSpro N32 Handbook.
; Test the effect of varargs on floating point types in the non-variable part
; of the argument list as specified by section 2 of the MIPSpro N32 Handbook.
;
; COM: N32/N64 are almost identical in this area so many of their checks have been
; COM: combined into the 'NEW' prefix (the N stands for New).
; N32/N64 are almost identical in this area so many of their checks have been
; combined into the 'NEW' prefix (the N stands for New).
;
; COM: On O32, varargs prevents all FPU argument register usage. This contradicts
; COM: the N32 handbook, but agrees with the SYSV ABI and GCC's behaviour.
; On O32, varargs prevents all FPU argument register usage. This contradicts
; the N32 handbook, but agrees with the SYSV ABI and GCC's behaviour.
@floats = global [11 x float] zeroinitializer
@doubles = global [11 x double] zeroinitializer
@ -52,8 +52,8 @@ entry:
; SYM32-DAG: addiu [[R2:\$[0-9]+]], ${{[0-9]+}}, %lo(doubles)
; SYM64-DAG: daddiu [[R2:\$[0-9]+]], ${{[0-9]+}}, %lo(doubles)
; COM: O32 forbids using floating point registers for the non-variable portion.
; COM: N32/N64 allow it.
; O32 forbids using floating point registers for the non-variable portion.
; N32/N64 allow it.
; O32BE-DAG: mtc1 $5, [[FTMP1:\$f[0-9]*[02468]+]]
; O32BE-DAG: mtc1 $4, [[FTMP2:\$f[0-9]*[13579]+]]
; O32LE-DAG: mtc1 $4, [[FTMP1:\$f[0-9]*[02468]+]]
@ -72,10 +72,10 @@ entry:
; NEW-DAG: sd $10, 48($sp)
; NEW-DAG: sd $11, 56($sp)
; COM: Get the varargs pointer
; COM: O32 has 4 bytes padding, 4 bytes for the varargs pointer, and 8 bytes reserved
; COM: for arguments 1 and 2.
; COM: N32/N64 has 8 bytes for the varargs pointer, and no reserved area.
; Get the varargs pointer
; O32 has 4 bytes padding, 4 bytes for the varargs pointer, and 8 bytes reserved
; for arguments 1 and 2.
; N32/N64 has 8 bytes for the varargs pointer, and no reserved area.
; O32-DAG: addiu [[VAPTR:\$[0-9]+]], $sp, 16
; O32-DAG: sw [[VAPTR]], 4($sp)
; N32-DAG: addiu [[VAPTR:\$[0-9]+]], $sp, 8
@ -133,11 +133,11 @@ entry:
; NEW-DAG: sd $11, 56($sp)
; Get the varargs pointer
; COM: O32 has 4 bytes padding, 4 bytes for the varargs pointer, and should have 8
; COM: bytes reserved for arguments 1 and 2 (the first float arg) but as discussed in
; COM: arguments-float.ll, GCC doesn't agree with MD00305 and treats floats as 4
; COM: bytes so we only have 12 bytes total.
; COM: N32/N64 has 8 bytes for the varargs pointer, and no reserved area.
; O32 has 4 bytes padding, 4 bytes for the varargs pointer, and should have 8
; bytes reserved for arguments 1 and 2 (the first float arg) but as discussed in
; arguments-float.ll, GCC doesn't agree with MD00305 and treats floats as 4
; bytes so we only have 12 bytes total.
; N32/N64 has 8 bytes for the varargs pointer, and no reserved area.
; O32-DAG: addiu [[VAPTR:\$[0-9]+]], $sp, 12
; O32-DAG: sw [[VAPTR]], 4($sp)
; N32-DAG: addiu [[VAPTR:\$[0-9]+]], $sp, 8

View File

@ -58,7 +58,7 @@ entry:
; O32-DAG: sdc1 $f14, 16([[R2]])
; NEW-DAG: sdc1 $f13, 16([[R2]])
; COM: O32 has run out of argument registers and starts using the stack
; O32 has run out of argument registers and starts using the stack
; O32-DAG: ldc1 [[F1:\$f[0-9]+]], 16($sp)
; O32-DAG: sdc1 [[F1]], 24([[R2]])
; NEW-DAG: sdc1 $f14, 24([[R2]])
@ -121,10 +121,10 @@ entry:
; O32-DAG: swc1 $f14, 8([[R1]])
; NEW-DAG: swc1 $f13, 8([[R1]])
; COM: O32 has run out of argument registers and (in theory) starts using the stack
; COM: I've yet to find a reference in the documentation about this but GCC uses up
; COM: the remaining two argument slots in the GPR's first. We'll do the same for
; COM: compatibility.
; O32 has run out of argument registers and (in theory) starts using the stack
; I've yet to find a reference in the documentation about this but GCC uses up
; the remaining two argument slots in the GPR's first. We'll do the same for
; compatibility.
; O32-DAG: mtc1 $6, $f0
; O32-DAG: swc1 $f0, 12([[R1]])
; NEW-DAG: swc1 $f14, 12([[R1]])
@ -132,7 +132,7 @@ entry:
; O32-DAG: swc1 $f0, 16([[R1]])
; NEW-DAG: swc1 $f15, 16([[R1]])
; COM: O32 is definitely out of registers now and switches to the stack.
; O32 is definitely out of registers now and switches to the stack.
; O32-DAG: lwc1 [[F1:\$f[0-9]+]], 16($sp)
; O32-DAG: swc1 [[F1]], 20([[R1]])
; NEW-DAG: swc1 $f16, 20([[R1]])
@ -146,7 +146,7 @@ entry:
; O32-DAG: swc1 [[F1]], 32([[R1]])
; NEW-DAG: swc1 $f19, 32([[R1]])
; COM: N32/N64 have run out of registers and start using the stack too
; N32/N64 have run out of registers and start using the stack too
; O32-DAG: lwc1 [[F1:\$f[0-9]+]], 32($sp)
; O32-DAG: swc1 [[F1]], 36([[R1]])
; NEW-DAG: lwc1 [[F1:\$f[0-9]+]], 0($sp)
@ -173,10 +173,10 @@ entry:
; The first argument is the same in O32/N32/N64.
; ALL-DAG: sb $4, 1([[R1]])
; COM: The first argument isn't floating point so floating point registers are not
; COM: used in O32, but N32/N64 will still use them.
; COM: The second slot is insufficiently aligned for double on O32 so it is skipped.
; COM: Also, double occupies two slots on O32 and only one for N32/N64.
; The first argument isn't floating point so floating point registers are not
; used in O32, but N32/N64 will still use them.
; The second slot is insufficiently aligned for double on O32 so it is skipped.
; Also, double occupies two slots on O32 and only one for N32/N64.
; O32LE-DAG: mtc1 $6, [[F1:\$f[0-9]*[02468]+]]
; O32LE-DAG: mtc1 $7, [[F2:\$f[0-9]*[13579]+]]
; O32BE-DAG: mtc1 $6, [[F2:\$f[0-9]*[13579]+]]
@ -204,11 +204,11 @@ entry:
; The first argument is the same in O32/N32/N64.
; ALL-DAG: sb $4, 1([[R1]])
; COM: The first argument isn't floating point so floating point registers are not
; COM: used in O32, but N32/N64 will still use them.
; COM: MD00305 and GCC disagree on this one. MD00305 says that floats are treated
; COM: as 8-byte aligned and occupy two slots on O32. GCC is treating them as 4-byte
; COM: aligned and occupying one slot. We'll use GCC's definition.
; The first argument isn't floating point so floating point registers are not
; used in O32, but N32/N64 will still use them.
; MD00305 and GCC disagree on this one. MD00305 says that floats are treated
; as 8-byte aligned and occupy two slots on O32. GCC is treating them as 4-byte
; aligned and occupying one slot. We'll use GCC's definition.
; O32-DAG: mtc1 $5, $f0
; O32-DAG: swc1 $f0, 4([[R2]])
; NEW-DAG: swc1 $f13, 4([[R2]])

View File

@ -26,8 +26,8 @@ define void @fn_i16_dotdotdot_i16(i16 %a, ...) {
entry:
; ALL-LABEL: fn_i16_dotdotdot_i16:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room
; COM: for the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -45,12 +45,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 12 due to the 4 bytes used to store local
; COM: variables, 4 bytes padding to maintain stack alignment, and the 4 byte
; COM: slot for the first fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 12 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 12
; O32-DAG: sw [[VA]], 0([[SP]])
@ -75,11 +75,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion.
; COM: This has used the stack pointer directly rather than the [[VA]] we just
; COM: set up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due
; COM: to byte order.
; Load the first argument from the variable portion.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
; NEW-LE-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
@ -141,8 +141,8 @@ define void @fn_i16_dotdotdot_i32(i16 %a, ...) {
entry:
; ALL-LABEL: fn_i16_dotdotdot_i32:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room for
; COM; the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -160,12 +160,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 12 due to the 4 bytes used to store local variables,
; COM: 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; COM: fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 12 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 12
; O32-DAG: sw [[VA]], 0([[SP]])
@ -190,11 +190,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion.
; COM: This has used the stack pointer directly rather than the [[VA]] we just set
; COM: up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; COM: order.
; Load the first argument from the variable portion.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
; NEW-LE-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
@ -256,8 +256,8 @@ define void @fn_i16_dotdotdot_i64(i16 %a, ...) {
entry:
; ALL-LABEL: fn_i16_dotdotdot_i64:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room for
; COM: the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -275,12 +275,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 12 due to the 4 bytes used to store local variables,
; COM: 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; COM: fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 12 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 12
; O32-DAG: sw [[VA]], 0([[SP]])
@ -308,11 +308,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion and copy it to the global.
; COM: This has used the stack pointer directly rather than the [[VA]] we just set
; COM: up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; COM: order.
; Load the first argument from the variable portion and copy it to the global.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: addiu [[GV:\$[0-9]+]], ${{[0-9]+}}, %lo(dwords)
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA_TMP2]])
; O32-DAG: sw [[ARG1]], 8([[GV]])
@ -378,8 +378,8 @@ define void @fn_i32_dotdotdot_i16(i32 %a, ...) {
entry:
; ALL-LABEL: fn_i32_dotdotdot_i16:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room for
; COM: the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -397,12 +397,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 12 due to the 4 bytes used to store local variables,
; COM: 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; COM: fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 12 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 12
; O32-DAG: sw [[VA]], 0([[SP]])
@ -427,11 +427,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion.
; COM: This has used the stack pointer directly rather than the [[VA]] we just set
; COM: up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; COM: order.
; Load the first argument from the variable portion.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
; NEW-LE-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
@ -493,8 +493,8 @@ define void @fn_i32_dotdotdot_i32(i32 %a, ...) {
entry:
; ALL-LABEL: fn_i32_dotdotdot_i32:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room for
; COM: the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -512,12 +512,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 12 due to the 4 bytes used to store local variables,
; COM: 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; COM: fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 12 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 12
; O32-DAG: sw [[VA]], 0([[SP]])
@ -542,11 +542,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion.
; COM: This has used the stack pointer directly rather than the [[VA]] we just set
; COM: up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; COM: order.
; Load the first argument from the variable portion.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
; NEW-LE-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
@ -608,8 +608,8 @@ define void @fn_i32_dotdotdot_i64(i32 %a, ...) {
entry:
; ALL-LABEL: fn_i32_dotdotdot_i64:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room for
; COM: the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -627,12 +627,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 12 due to the 4 bytes used to store local variables,
; COM: 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; COM: fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 12 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the 4 byte slot for the first
; fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 12
; O32-DAG: sw [[VA]], 0([[SP]])
@ -644,7 +644,7 @@ entry:
; ALL: teqi $zero, 1
; COM: Increment [[VA]] (and realign pointer for O32)
; Increment [[VA]] (and realign pointer for O32)
; O32: lw [[VA:\$[0-9]+]], 0([[SP]])
; O32-DAG: addiu [[VA_TMP0:\$[0-9]+]], [[VA]], 7
; O32-DAG: addiu [[VA_TMP1:\$[0-9]+]], $zero, -8
@ -660,11 +660,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion and copy it to the global.
; COM: This has used the stack pointer directly rather than the [[VA]] we just set
; COM: up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; COM: order.
; Load the first argument from the variable portion and copy it to the global.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: addiu [[GV:\$[0-9]+]], ${{[0-9]+}}, %lo(dwords)
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA_TMP2]])
; O32-DAG: sw [[ARG1]], 8([[GV]])
@ -730,8 +730,8 @@ define void @fn_i64_dotdotdot_i16(i64 %a, ...) {
entry:
; ALL-LABEL: fn_i64_dotdotdot_i16:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room for
; COM: the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -748,12 +748,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 16 due to the 4 bytes used to store local variables,
; COM: 4 bytes padding to maintain stack alignment, and the two 4 byte slots for the
; COM: first fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 16 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the two 4 byte slots for the
; first fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 16
; O32-DAG: sw [[VA]], 0([[SP]])
@ -778,11 +778,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion.
; COM: This has used the stack pointer directly rather than the [[VA]] we just set
; COM: up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; COM: order.
; Load the first argument from the variable portion.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
; NEW-LE-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
@ -844,8 +844,8 @@ define void @fn_i64_dotdotdot_i32(i64 %a, ...) {
entry:
; ALL-LABEL: fn_i64_dotdotdot_i32:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room for
; COM: the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -862,12 +862,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 16 due to the 4 bytes used to store local variables,
; COM: 4 bytes padding to maintain stack alignment, and the two 4 byte slots for the
; COM: first fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 16 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the two 4 byte slots for the
; first fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 16
; O32-DAG: sw [[VA]], 0([[SP]])
@ -892,11 +892,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion.
; COM: This has used the stack pointer directly rather than the [[VA]] we just set
; COM: up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; COM: order.
; Load the first argument from the variable portion.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
; NEW-LE-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
@ -958,8 +958,8 @@ define void @fn_i64_dotdotdot_i64(i64 %a, ...) {
entry:
; ALL-LABEL: fn_i64_dotdotdot_i64:
; COM: Set up the stack with an 8-byte local area. N32/N64 must also make room for
; COM: the argument save area (56 bytes).
; Set up the stack with an 8-byte local area. N32/N64 must also make room for
; the argument save area (56 bytes).
; O32: addiu [[SP:\$sp]], $sp, -8
; N32: addiu [[SP:\$sp]], $sp, -64
; N64: daddiu [[SP:\$sp]], $sp, -64
@ -976,12 +976,12 @@ entry:
; NEW-DAG: sd $6, 16([[SP]])
; NEW-DAG: sd $5, 8([[SP]])
; COM: Initialize variable argument pointer.
; COM: For O32, the offset is 16 due to the 4 bytes used to store local variables,
; COM: 4 bytes padding to maintain stack alignment, and the two 4 byte slots for the
; COM: first fixed argument.
; COM: For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; COM: space.
; Initialize variable argument pointer.
; For O32, the offset is 16 due to the 4 bytes used to store local variables,
; 4 bytes padding to maintain stack alignment, and the two 4 byte slots for the
; first fixed argument.
; For N32/N64, it is only 8 since the fixed arguments do not reserve stack
; space.
; O32-DAG: addiu [[VA:\$[0-9]+]], [[SP]], 16
; O32-DAG: sw [[VA]], 0([[SP]])
@ -1009,11 +1009,11 @@ entry:
; N64-DAG: addiu [[VA2:\$[0-9]+]], [[VA]], 8
; N64-DAG: sd [[VA2]], 0([[SP]])
; COM: Load the first argument from the variable portion and copy it to the global.
; COM: This has used the stack pointer directly rather than the [[VA]] we just set
; COM: up.
; COM: Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; COM: order.
; Load the first argument from the variable portion and copy it to the global.
; This has used the stack pointer directly rather than the [[VA]] we just set
; up.
; Big-endian mode for N32/N64 must add an additional 4 to the offset due to byte
; order.
; O32-DAG: addiu [[GV:\$[0-9]+]], ${{[0-9]+}}, %lo(dwords)
; O32-DAG: lw [[ARG1:\$[0-9]+]], 0([[VA]])
; O32-DAG: sw [[ARG1]], 8([[GV]])

View File

@ -57,15 +57,15 @@ entry:
; SYM32-DAG: addiu [[R1:\$[0-9]+]], ${{[0-9]+}}, %lo(bytes)
; SYM64-DAG: daddiu [[R1:\$[0-9]+]], ${{[0-9]+}}, %lo(bytes)
; COM: The first four arguments are the same in O32/N32/N64
; The first four arguments are the same in O32/N32/N64
; ALL-DAG: sb $4, 1([[R1]])
; ALL-DAG: sb $5, 2([[R1]])
; ALL-DAG: sb $6, 3([[R1]])
; ALL-DAG: sb $7, 4([[R1]])
; COM: N32/N64 get an extra four arguments in registers
; COM: O32 starts loading from the stack. The addresses start at 16 because space is
; COM: always reserved for the first four arguments.
; N32/N64 get an extra four arguments in registers
; O32 starts loading from the stack. The addresses start at 16 because space is
; always reserved for the first four arguments.
; O32-DAG: lw [[R3:\$[0-9]+]], 16($sp)
; O32-DAG: sb [[R3]], 5([[R1]])
; NEW-DAG: sb $8, 5([[R1]])
@ -79,9 +79,9 @@ entry:
; O32-DAG: sb [[R3]], 8([[R1]])
; NEW-DAG: sb $11, 8([[R1]])
; COM: O32/N32/N64 are accessing the stack at this point.
; COM: Unlike O32, N32/N64 do not reserve space for the arguments.
; COM: increase by 4 for O32 and 8 for N32/N64.
; O32/N32/N64 are accessing the stack at this point.
; Unlike O32, N32/N64 do not reserve space for the arguments.
; increase by 4 for O32 and 8 for N32/N64.
; O32-DAG: lw [[R3:\$[0-9]+]], 32($sp)
; O32-DAG: sb [[R3]], 9([[R1]])
; NEW-DAG: ld [[R3:\$[0-9]+]], 0($sp)
@ -127,19 +127,19 @@ entry:
; The first argument is the same in O32/N32/N64.
; ALL-DAG: sb $4, 1([[R1]])
; COM: The second slot is insufficiently aligned for i64 on O32 so it is skipped.
; COM: Also, i64 occupies two slots on O32 and only one for N32/N64.
; The second slot is insufficiently aligned for i64 on O32 so it is skipped.
; Also, i64 occupies two slots on O32 and only one for N32/N64.
; O32-DAG: sw $6, 8([[R2]])
; O32-DAG: sw $7, 12([[R2]])
; NEW-DAG: sd $5, 8([[R2]])
; COM: N32/N64 get an extra four arguments in registers and still have two left from
; COM: the first four.
; COM: O32 starts loading from the stack. The addresses start at 16 because space is
; COM: always reserved for the first four arguments.
; COM: It's not clear why O32 uses lbu for this argument, but it's not wrong so we'll
; COM: accept it for now. The only IR difference is that this argument has
; COM: anyext from i8 and align 8 on it.
; N32/N64 get an extra four arguments in registers and still have two left from
; the first four.
; O32 starts loading from the stack. The addresses start at 16 because space is
; always reserved for the first four arguments.
; It's not clear why O32 uses lbu for this argument, but it's not wrong so we'll
; accept it for now. The only IR difference is that this argument has
; anyext from i8 and align 8 on it.
; O32-DAG: lw [[R3:\$[0-9]+]], 16($sp)
; O32-DAG: sb [[R3]], 2([[R1]])
; NEW-DAG: sb $6, 2([[R1]])
@ -163,9 +163,9 @@ entry:
; O32-DAG: sw [[R3]], 20([[R2]])
; NEW-DAG: sd $11, 16([[R2]])
; COM: O32/N32/N64 are accessing the stack at this point.
; COM: Unlike O32, N32/N64 do not reserve space for the arguments.
; COM: increase by 4 for O32 and 8 for N32/N64.
; O32/N32/N64 are accessing the stack at this point.
; Unlike O32, N32/N64 do not reserve space for the arguments.
; increase by 4 for O32 and 8 for N32/N64.
; O32-DAG: lw [[R3:\$[0-9]+]], 48($sp)
; O32-DAG: sb [[R3]], 7([[R1]])
; NEW-DAG: ld [[R3:\$[0-9]+]], 0($sp)

View File

@ -4,8 +4,8 @@
; RUN: llc -march=mips64 -relocation-model=static -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64 %s
; RUN: llc -march=mips64el -relocation-model=static -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64 %s
; COM: Test the fp128 returns for N32/N64 and all byte orders as specified by
; COM: section 5 of MD00305 (MIPS ABIs Described).
; Test the fp128 returns for N32/N64 and all byte orders as specified by
; section 5 of MD00305 (MIPS ABIs Described).
;
; O32 is not tested because long double is the same as double on O32.
;

View File

@ -4,7 +4,7 @@
; RUN: llc -mtriple=mips64-linux-gnu -relocation-model=static -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64 %s
; RUN: llc -mtriple=mips64el-linux-gnu -relocation-model=static -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64 %s
; COM: Test return of {fp128} agrees with de-facto N32/N64 ABI.
; Test return of {fp128} agrees with de-facto N32/N64 ABI.
@struct_fp128 = global {fp128} zeroinitializer
@ -19,9 +19,9 @@ entry:
; O32 generates different IR so we don't test it here. It returns the struct
; indirectly.
; COM: Contrary to the N32/N64 ABI documentation, a struct containing a long
; COM: double is returned in $f0, and $f1 instead of the usual $f0, and $f2.
; COM: This is to match the de facto ABI as implemented by GCC.
; Contrary to the N32/N64 ABI documentation, a struct containing a long double
; is returned in $f0, and $f1 instead of the usual $f0, and $f2. This is to
; match the de facto ABI as implemented by GCC.
; N32-DAG: lui [[R1:\$[0-9]+]], %hi(struct_fp128)
; N32-DAG: ldc1 $f0, %lo(struct_fp128)([[R1]])
; N32-DAG: addiu [[R3:\$[0-9]+]], [[R1]], %lo(struct_fp128)

View File

@ -6,10 +6,10 @@
; RUN: llc -march=mips64el -mcpu=mips64r2 < %s | FileCheck -check-prefixes=ALL,MIPS64-GT-R1 %s
; RUN: llc -march=mips64el -mcpu=mips64r6 < %s | FileCheck -check-prefixes=ALL,MIPS64-GT-R1 %s
; COM: Prefixes:
; COM: ALL - All
; COM: MIPS32-GT-R1 - MIPS64r1 and above (does not include MIPS64's)
; COM: MIPS64-GT-R1 - MIPS64r1 and above
; Prefixes:
; ALL - All
; MIPS32-GT-R1 - MIPS64r1 and above (does not include MIPS64's)
; MIPS64-GT-R1 - MIPS64r1 and above
define i32 @ctlz_i32(i32 signext %X) nounwind readnone {
entry:

View File

@ -12,17 +12,17 @@
; RUN: llc -march=mips64 -mcpu=mips64r2 -mno-check-zero-division -relocation-model=pic < %s | FileCheck %s -check-prefixes=ALL,ACC64,NOCHECK
; RUN: llc -march=mips64 -mcpu=mips64r6 -mno-check-zero-division -relocation-model=pic < %s | FileCheck %s -check-prefixes=ALL,GPR64,NOCHECK
; COM: FileCheck Prefixes:
; COM: ALL - All targets
; COM: ACC32 - Accumulator based multiply/divide on 32-bit targets
; COM: ACC64 - Same as ACC32 but only for 64-bit targets
; COM: GPR32 - GPR based multiply/divide on 32-bit targets
; COM: GPR64 - Same as GPR32 but only for 64-bit targets
; COM: ACC32-TRAP - Same as TRAP and ACC32 combined
; COM: ACC64-TRAP - Same as TRAP and ACC64 combined
; COM: GPR32-TRAP - Same as TRAP and GPR32 combined
; COM: GPR64-TRAP - Same as TRAP and GPR64 combined
; COM: NOCHECK - Division by zero will not be detected
; FileCheck Prefixes:
; ALL - All targets
; ACC32 - Accumulator based multiply/divide on 32-bit targets
; ACC64 - Same as ACC32 but only for 64-bit targets
; GPR32 - GPR based multiply/divide on 32-bit targets
; GPR64 - Same as GPR32 but only for 64-bit targets
; ACC32-TRAP - Same as TRAP and ACC32 combined
; ACC64-TRAP - Same as TRAP and ACC64 combined
; GPR32-TRAP - Same as TRAP and GPR32 combined
; GPR64-TRAP - Same as TRAP and GPR64 combined
; NOCHECK - Division by zero will not be detected
@g0 = common global i32 0, align 4
@g1 = common global i32 0, align 4

View File

@ -65,7 +65,7 @@ entry:
declare void @helper_02(i32, i32, i32, i32,
i32, i32, i32, i32, i32*)
; COM: N32/N64 ABIs
; N32/N64 ABIs
define void @func_02() {
entry:
; GP64-LABEL: func_02:
@ -108,7 +108,7 @@ entry:
declare void @helper_03(i32, i32, i32, i32, i32*, i32*)
; COM: O32 ABI
; O32 ABI
define void @func_03(i32 %p0, i32 %p1, i32 %p2, i32 %p3, i32* %b) {
entry:
; GP32-LABEL: func_03:
@ -130,7 +130,7 @@ entry:
declare void @helper_04(i32, i32, i32, i32,
i32, i32, i32, i32, i32*, i32*)
; COM: N32/N64 ABIs
; N32/N64 ABIs
define void @func_04(i32 %p0, i32 %p1, i32 %p2, i32 %p3,
i32 %p4, i32 %p5, i32 %p6, i32 %p7,
i32* %b) {
@ -153,7 +153,7 @@ entry:
; Check dynamic stack realignment in functions with variable-sized objects.
; COM: O32 ABI
; O32 ABI
define void @func_05(i32 %sz) {
entry:
; GP32-LABEL: func_05:
@ -194,7 +194,7 @@ entry:
ret void
}
; COM: N32/N64 ABIs
; N32/N64 ABIs
define void @func_06(i32 %sz) {
entry:
; GP64-LABEL: func_06:
@ -262,7 +262,7 @@ entry:
ret void
}
; COM: N32/N64 ABIs
; N32/N64 ABIs
define void @func_08(i32 %p0, i32 %p1, i32 %p2, i32 %p3,
i32 %p4, i32 %p5, i32 %p6, i32 %p7,
i32 %sz) {

View File

@ -5,7 +5,7 @@
; RUN: llc -no-integrated-as -march=mips -relocation-model=pic < %s | \
; RUN: FileCheck -check-prefixes=ALL,BE32,GAS %s
; COM: IAS might not print in the same way since it parses the assembly.
; IAS might not print in the same way since it parses the assembly.
; RUN: llc -march=mipsel -relocation-model=pic < %s | \
; RUN: FileCheck -check-prefixes=ALL,LE32,IAS %s
; RUN: llc -march=mips -relocation-model=pic < %s | \

View File

@ -3,10 +3,10 @@
; RUN: llc -march=mips64el -mcpu=mips64r2 < %s | FileCheck %s -check-prefixes=ALL,ACC
; RUN: llc -march=mips64el -mcpu=mips64r6 < %s | FileCheck %s -check-prefixes=ALL,GPR
; COM: FileCheck prefixes:
; COM: ALL - All targets
; COM: ACC - Targets with accumulator based mul/div (i.e. pre-MIPS32r6)
; COM: GPR - Targets with register based mul/div (i.e. MIPS32r6)
; FileCheck prefixes:
; ALL - All targets
; ACC - Targets with accumulator based mul/div (i.e. pre-MIPS32r6)
; GPR - Targets with register based mul/div (i.e. MIPS32r6)
define i64 @m0(i64 %a0, i64 %a1) nounwind readnone {
entry:

View File

@ -11,9 +11,8 @@
# RUN: -run-pass=prologepilog --verify-machineinstrs < %s | \
# RUN: FileCheck %s --check-prefixes=CHECK,SAVEALL
# COM: TODO FIXME: We only check the save and restores of the callee saved gpr
# COM: for ELF becuase AIX callee saved registers haven't been
# COM: properly implemented yet.
# TODO FIXME: We only check the save and restores of the callee saved gpr for
# ELF becuase AIX callee saved registers haven't been properly implemented yet.
---
name: CRAllSave
@ -78,8 +77,8 @@ body: |
; Verify the proper live-ins have been added in the prologue.
; CHECK: liveins: $x3, $x14, $cr2
; COM: ELF V2 ABI allows saving only the clobbered cr fields,
; COM: whereas the other ABIs do not.
; ELF V2 ABI allows saving only the clobbered cr fields,
; whereas the other ABIs do not.
; SAVEONE: $x12 = MFOCRF8 killed $cr2
; SAVEALL: $x12 = MFCR8 implicit killed $cr2

View File

@ -24,7 +24,7 @@ define <4 x double> @castB(<2 x double> %m) nounwind uwtable readnone ssp {
ret <4 x double> %shuffle.i
}
; COM: AVX2 is needed for integer types.
; AVX2 is needed for integer types.
define <4 x i64> @castC(<2 x i64> %m) nounwind uwtable readnone ssp {
; AVX-LABEL: castC:

View File

@ -919,8 +919,8 @@ entry:
; Verify that fptosi(%x) isn't simplified when the rounding mode is
; unknown.
; Verify that no gross errors happen.
; COM: FIXME: The SSE/AVX code does not raise an invalid exception for all
; COM: value sthat don't fit in i8.
; FIXME: The SSE/AVX code does not raise an invalid exception for all values
; that don't fit in i8.
define i8 @f20s8(double %x) #0 {
; X87-LABEL: f20s8:
; X87: # %bb.0: # %entry
@ -966,8 +966,8 @@ entry:
; Verify that fptosi(%x) isn't simplified when the rounding mode is
; unknown.
; Verify that no gross errors happen.
; COM: FIXME: The SSE/AVX code does not raise an invalid exception for all
; COM: values that don't fit in i16.
; FIXME: The SSE/AVX code does not raise an invalid exception for all values
; that don't fit in i16.
define i16 @f20s16(double %x) #0 {
; X87-LABEL: f20s16:
; X87: # %bb.0: # %entry
@ -1188,11 +1188,11 @@ entry:
ret i128 %result
}
; COM: Verify that fptoui(%x) isn't simplified when the rounding mode is
; COM: unknown.
; COM: Verify that no gross errors happen.
; COM: FIXME: The SSE/AVX code does not raise an invalid exception for all values
; COM: that don't fit in i8.
; Verify that fptoui(%x) isn't simplified when the rounding mode is
; unknown.
; Verify that no gross errors happen.
; FIXME: The SSE/AVX code does not raise an invalid exception for all values
; that don't fit in i8.
define i8 @f20u8(double %x) #0 {
; X87-LABEL: f20u8:
; X87: # %bb.0: # %entry
@ -1237,8 +1237,8 @@ entry:
; Verify that fptoui(%x) isn't simplified when the rounding mode is
; unknown.
; Verify that no gross errors happen.
; COM: FIXME: The SSE/AVX code does not raise an invalid exception for all
; COM: values that don't fit in i16.
; FIXME: The SSE/AVX code does not raise an invalid exception for all values
; that don't fit in i16.
define i16 @f20u16(double %x) #0 {
; X87-LABEL: f20u16:
; X87: # %bb.0: # %entry
@ -1285,8 +1285,8 @@ entry:
; Verify that fptoui(%x) isn't simplified when the rounding mode is
; unknown.
; Verify that no gross errors happen.
; COM: FIXME: The X87/SSE/AVX1 code does not raise an invalid exception for all
; COM: values that don't fit in i32. The AVX512 code does.
; FIXME: The X87/SSE/AVX1 code does not raise an invalid exception for all
; values that don't fit in i32. The AVX512 code does.
define i32 @f20u(double %x) #0 {
; X87-LABEL: f20u:
; X87: # %bb.0: # %entry

View File

@ -5,7 +5,7 @@
; Check constant loads of every 128-bit and 256-bit vector type
; for size optimization using splat ops available with AVX and AVX2.
; COM: There is no AVX broadcast from double to 128-bit vector because movddup has been around since SSE3 (grrr).
; There is no AVX broadcast from double to 128-bit vector because movddup has been around since SSE3 (grrr).
define <2 x double> @splat_v2f64(<2 x double> %x) #0 {
; CHECK-LABEL: splat_v2f64:
; CHECK: # %bb.0:
@ -88,9 +88,8 @@ define <8 x float> @splat_v8f32_pgso(<8 x float> %x) !prof !14 {
ret <8 x float> %add
}
; COM: AVX can't do integer splats, so fake it: use vmovddup to splat 64-bit
; COM: value. We also generate vmovddup for AVX2 because it's one byte smaller
; COM: than vpbroadcastq.
; AVX can't do integer splats, so fake it: use vmovddup to splat 64-bit value.
; We also generate vmovddup for AVX2 because it's one byte smaller than vpbroadcastq.
define <2 x i64> @splat_v2i64(<2 x i64> %x) #1 {
; AVX-LABEL: splat_v2i64:
; AVX: # %bb.0:
@ -125,8 +124,8 @@ define <2 x i64> @splat_v2i64_pgso(<2 x i64> %x) !prof !14 {
ret <2 x i64> %add
}
; COM: AVX can't do 256-bit integer ops, so we split this into two 128-bit
; COM: vectors, and then we fake it: use vmovddup to splat 64-bit value.
; AVX can't do 256-bit integer ops, so we split this into two 128-bit vectors,
; and then we fake it: use vmovddup to splat 64-bit value.
define <4 x i64> @splat_v4i64(<4 x i64> %x) #0 {
; AVX-LABEL: splat_v4i64:
; AVX: # %bb.0:
@ -167,7 +166,7 @@ define <4 x i64> @splat_v4i64_pgso(<4 x i64> %x) !prof !14 {
ret <4 x i64> %add
}
; COM: AVX can't do integer splats, so fake it: use vbroadcastss to splat 32-bit value.
; AVX can't do integer splats, so fake it: use vbroadcastss to splat 32-bit value.
define <4 x i32> @splat_v4i32(<4 x i32> %x) #1 {
; AVX-LABEL: splat_v4i32:
; AVX: # %bb.0:
@ -200,7 +199,7 @@ define <4 x i32> @splat_v4i32_pgso(<4 x i32> %x) !prof !14 {
ret <4 x i32> %add
}
; COM: AVX can't do integer splats, so fake it: use vbroadcastss to splat 32-bit value.
; AVX can't do integer splats, so fake it: use vbroadcastss to splat 32-bit value.
define <8 x i32> @splat_v8i32(<8 x i32> %x) #0 {
; AVX-LABEL: splat_v8i32:
; AVX: # %bb.0:
@ -239,7 +238,7 @@ define <8 x i32> @splat_v8i32_pgso(<8 x i32> %x) !prof !14 {
ret <8 x i32> %add
}
; COM: AVX can't do integer splats, and there's no broadcast fakery for 16-bit. Could use pshuflw, etc?
; AVX can't do integer splats, and there's no broadcast fakery for 16-bit. Could use pshuflw, etc?
define <8 x i16> @splat_v8i16(<8 x i16> %x) #1 {
; AVX-LABEL: splat_v8i16:
; AVX: # %bb.0:
@ -270,7 +269,7 @@ define <8 x i16> @splat_v8i16_pgso(<8 x i16> %x) !prof !14 {
ret <8 x i16> %add
}
; COM: AVX can't do integer splats, and there's no broadcast fakery for 16-bit. Could use pshuflw, etc?
; AVX can't do integer splats, and there's no broadcast fakery for 16-bit. Could use pshuflw, etc?
define <16 x i16> @splat_v16i16(<16 x i16> %x) #0 {
; AVX-LABEL: splat_v16i16:
; AVX: # %bb.0:
@ -309,7 +308,7 @@ define <16 x i16> @splat_v16i16_pgso(<16 x i16> %x) !prof !14 {
ret <16 x i16> %add
}
; COM: AVX can't do integer splats, and there's no broadcast fakery for 8-bit. Could use pshufb, etc?
; AVX can't do integer splats, and there's no broadcast fakery for 8-bit. Could use pshufb, etc?
define <16 x i8> @splat_v16i8(<16 x i8> %x) #1 {
; AVX-LABEL: splat_v16i8:
; AVX: # %bb.0:
@ -340,7 +339,7 @@ define <16 x i8> @splat_v16i8_pgso(<16 x i8> %x) !prof !14 {
ret <16 x i8> %add
}
; COM: AVX can't do integer splats, and there's no broadcast fakery for 8-bit. Could use pshufb, etc?
; AVX can't do integer splats, and there's no broadcast fakery for 8-bit. Could use pshufb, etc?
define <32 x i8> @splat_v32i8(<32 x i8> %x) #0 {
; AVX-LABEL: splat_v32i8:
; AVX: # %bb.0:
@ -379,9 +378,9 @@ define <32 x i8> @splat_v32i8_pgso(<32 x i8> %x) !prof !14 {
ret <32 x i8> %add
}
; COM: PR23259: Verify that ISel doesn't crash with a 'fatal error in backend'
; COM: due to a missing AVX pattern to select a v2i64 X86ISD::BROADCAST of a
; COM: loadi64 with multiple uses.
; PR23259: Verify that ISel doesn't crash with a 'fatal error in backend'
; due to a missing AVX pattern to select a v2i64 X86ISD::BROADCAST of a
; loadi64 with multiple uses.
@A = common global <3 x i64> zeroinitializer, align 32

View File

@ -8,9 +8,9 @@
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,X64,AVX,X64-AVX,AVX1,X64-AVX1
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X64,AVX,X64-AVX,AVX512,X64-AVX512
; COM: Ensure that the backend no longer emits unnecessary vector insert
; COM: instructions immediately after SSE scalar fp instructions like addss or
; COM: mulss.
; Ensure that the backend no longer emits unnecessary vector insert
; instructions immediately after SSE scalar fp instructions
; like addss or mulss.
define <4 x float> @test_add_ss(<4 x float> %a, <4 x float> %b) {
; SSE-LABEL: test_add_ss:
@ -635,8 +635,8 @@ define <2 x double> @blend_div_sd(<2 x double> %a, double %b) {
ret <2 x double> %shuf
}
; COM: Ensure that the backend selects SSE/AVX scalar fp instructions
; COM: from a packed fp instruction plus a vector insert.
; Ensure that the backend selects SSE/AVX scalar fp instructions
; from a packed fp instruction plus a vector insert.
define <4 x float> @insert_test_add_ss(<4 x float> %a, <4 x float> %b) {
; SSE-LABEL: insert_test_add_ss:

View File

@ -89,9 +89,9 @@ define <4 x i32> @test4(<4 x i32> %a) {
ret <4 x i32> %shl
}
; COM: If we have AVX/SSE2 but not AVX2, verify that the following shift is
; COM: split into two pmullw instructions. With AVX2, the test case below would
; COM: produce a single vpmullw.
; If we have AVX/SSE2 but not AVX2, verify that the following shift is split
; into two pmullw instructions. With AVX2, the test case below would produce
; a single vpmullw.
define <16 x i16> @test5(<16 x i16> %a) {
; SSE-LABEL: test5:
@ -109,9 +109,9 @@ define <16 x i16> @test5(<16 x i16> %a) {
ret <16 x i16> %shl
}
; COM: If we have AVX/SSE4.1 but not AVX2, verify that the following shift is
; COM: split into two pmulld instructions. With AVX2, the test case below would
; COM: produce a single vpsllvd instead.
; If we have AVX/SSE4.1 but not AVX2, verify that the following shift is split
; into two pmulld instructions. With AVX2, the test case below would produce
; a single vpsllvd instead.
define <8 x i32> @test6(<8 x i32> %a) {
; SSE2-LABEL: test6:
@ -148,9 +148,9 @@ define <8 x i32> @test6(<8 x i32> %a) {
ret <8 x i32> %shl
}
; COM: With AVX2 and AVX512, the test case below should produce a sequence of
; COM: two vpmullw instructions. On SSE2 instead, we split the shift in four
; COM: parts and then we convert each part into a pmullw.
; With AVX2 and AVX512, the test case below should produce a sequence of
; two vpmullw instructions. On SSE2 instead, we split the shift in four
; parts and then we convert each part into a pmullw.
define <32 x i16> @test7(<32 x i16> %a) {
; SSE-LABEL: test7:
@ -183,8 +183,8 @@ define <32 x i16> @test7(<32 x i16> %a) {
ret <32 x i16> %shl
}
; COM: Similar to test7; the difference is that with AVX512 support we only
; COM: produce a single vpsllvd/vpsllvq instead of a pair of vpsllvd/vpsllvq.
; Similar to test7; the difference is that with AVX512 support
; we only produce a single vpsllvd/vpsllvq instead of a pair of vpsllvd/vpsllvq.
define <16 x i32> @test8(<16 x i32> %a) {
; SSE2-LABEL: test8:
@ -243,8 +243,7 @@ define <16 x i32> @test8(<16 x i32> %a) {
ret <16 x i32> %shl
}
; COM: The shift from 'test9' gets shifted separately and blended if we don't
; COM: have AVX2/AVX512f support.
; The shift from 'test9' gets shifted separately and blended if we don't have AVX2/AVX512f support.
define <8 x i64> @test9(<8 x i64> %a) {
; SSE2-LABEL: test9:

View File

@ -2,8 +2,8 @@
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE42
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
; COM: If we have SSE/AVX intrinsics in the code, we miss obvious combines
; COM: unless we do them late on X86-specific nodes.
; If we have SSE/AVX intrinsics in the code, we miss obvious combines
; unless we do them late on X86-specific nodes.
declare <4 x i32> @llvm.x86.sse41.pmaxsd(<4 x i32>, <4 x i32>)

View File

@ -6,9 +6,8 @@
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512DQ
; COM: AVX1 has support for 256-bit bitwise logic because the FP variants were
; COM: included. If using those ops requires extra insert/extract though, it's
; COM: probably not worth it.
; AVX1 has support for 256-bit bitwise logic because the FP variants were included.
; If using those ops requires extra insert/extract though, it's probably not worth it.
define <8 x i32> @PR32790(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i32> %d) {
; SSE-LABEL: PR32790:

View File

@ -49,7 +49,7 @@
; ASM: movl $2, {{.*}}
; ASM: movl $3, {{.*}}
; COM: ASM that store-to-push conversion fires.
; ASM that store-to-push conversion fires.
; ASM: pushl
; ASM-NEXT: pushl
; ASM-NEXT: calll "?f@@YAXAAH0@Z"

View File

@ -101,9 +101,9 @@ attributes #1 = { nounwind readnone }
!32 = !DILocation(line: 21, scope: !26)
!33 = !DILocation(line: 22, scope: !26)
; COM: PRESENT verifies that static member declarations have these attributes:
; COM: external, declaration, accessibility, and either DW_AT_linkage_name (for
; COM: variables) or DW_AT_const_value (for constants).
; PRESENT verifies that static member declarations have these attributes:
; external, declaration, accessibility, and either DW_AT_linkage_name
; (for variables) or DW_AT_const_value (for constants).
;
; PRESENT: .debug_info contents:
; PRESENT: DW_TAG_variable
@ -204,9 +204,9 @@ attributes #1 = { nounwind readnone }
; DARWINP-NEXT: DW_AT_location
; DARWINP-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1cE"
; COM: ABSENT verifies that static member declarations do not have either
; COM: DW_AT_location or DW_AT_data_member_location; also, variables do not
; COM: have DW_AT_const_value and constants do not have DW_AT_linkage_name.
; ABSENT verifies that static member declarations do not have either
; DW_AT_location or DW_AT_data_member_location; also, variables do not
; have DW_AT_const_value and constants do not have DW_AT_linkage_name.
;
; ABSENT: .debug_info contents:
; ABSENT: DW_TAG_member

View File

@ -408,11 +408,11 @@
; RUN: echo 'CHECK-DAG: def' >> %t.chk
; Prefixes used here:
; COM: DAG = quiet, -v, or -vv
; COM: DAG-Q = quiet
; COM: DAG-V = -v or -vv (-vv implies -v)
; COM: DAG-VQ = -v and not -vv
; COM: DAG-VV = -vv
; DAG = quiet, -v, or -vv
; DAG-Q = quiet
; DAG-V = -v or -vv (-vv implies -v)
; DAG-VQ = -v and not -vv
; DAG-VV = -vv
; RUN: %ProtectFileCheckOutput \
; RUN: not FileCheck -dump-input=always -input-file %t.in %t.chk 2>&1 \

View File

@ -1,8 +1,8 @@
; COM: Test that variables not starting with dollar sign get undefined after a
; COM: CHECK-LABEL directive iff --enable-var-scope is used.
; Test that variables not starting with dollar sign get undefined after a
; CHECK-LABEL directive iff --enable-var-scope is used.
; COM: Reference run: variables remain defined at all time when not using
; COM: --enable-var-scope option.
; Reference run: variables remain defined at all time when not using
; --enable-var-scope option.
RUN: FileCheck --check-prefixes CHECK,LOCAL3,GLOBAL --input-file %s %s
RUN: FileCheck --check-prefixes CHECK,GLOBAL --enable-var-scope --input-file %s %s

View File

@ -6,7 +6,7 @@
// CHECK: .quad 3
// COM: MSVC does AShr.
// MSVC does AShr.
// MSVC: .quad -1
.quad (~0 >> 62)

View File

@ -11,14 +11,14 @@
// Test that we produce the correct relocation.
// FIXME: move more relocation only tests here.
// COM: Check prefixes:
// COM: RELOC - Check the relocation in the object.
// COM: FIXUP - Check the fixup on the instruction.
// COM: ENCBE - Check the big-endian encoding on the instruction.
// COM: ENCLE - Check the little-endian encoding on the instruction.
// COM: ????? - Placeholder. Relocation is defined but the way of generating it is
// COM: unknown.
// COM: FIXME - Placeholder. Generation method is known but doesn't work.
// Check prefixes:
// RELOC - Check the relocation in the object.
// FIXUP - Check the fixup on the instruction.
// ENCBE - Check the big-endian encoding on the instruction.
// ENCLE - Check the little-endian encoding on the instruction.
// ????? - Placeholder. Relocation is defined but the way of generating it is
// unknown.
// FIXME - Placeholder. Generation method is known but doesn't work.
// DATA-LABEL: Name: .text
// DATA: SectionData (

View File

@ -11,14 +11,14 @@
// Test that we produce the correct relocation.
// FIXME: move more relocation only tests here.
// COM: Check prefixes:
// COM: RELOC - Check the relocation in the object.
// COM: FIXUP - Check the fixup on the instruction.
// COM: ENCBE - Check the big-endian encoding on the instruction.
// COM: ENCLE - Check the little-endian encoding on the instruction.
// COM: ????? - Placeholder. Relocation is defined but the way of generating it is
// COM: unknown.
// COM: FIXME - Placeholder. Generation method is known but doesn't work.
// Check prefixes:
// RELOC - Check the relocation in the object.
// FIXUP - Check the fixup on the instruction.
// ENCBE - Check the big-endian encoding on the instruction.
// ENCLE - Check the little-endian encoding on the instruction.
// ????? - Placeholder. Relocation is defined but the way of generating it is
// unknown.
// FIXME - Placeholder. Generation method is known but doesn't work.
// RELOC-LABEL: .rel.text {
// DATA-LABEL: Name: .text

View File

@ -5,10 +5,10 @@
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+c,+relax < %s \
# RUN: | llvm-readobj -r | FileCheck -check-prefix=RELOC %s
# COM: Check prefixes:
# COM: RELOC - Check the relocation in the object.
# COM: FIXUP - Check the fixup on the instruction.
# COM: INSTR - Check the instruction is handled properly by the ASMPrinter
# Check prefixes:
# RELOC - Check the relocation in the object.
# FIXUP - Check the fixup on the instruction.
# INSTR - Check the instruction is handled properly by the ASMPrinter
c.jal foo
# A compressed jump (c.j) to an unresolved symbol will be relaxed to a (jal).
# RELOC: R_RISCV_JAL

View File

@ -3,10 +3,10 @@
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+c < %s \
# RUN: | llvm-readobj -r | FileCheck -check-prefix=RELOC %s
# COM: Check prefixes:
# COM: RELOC - Check the relocation in the object.
# COM: FIXUP - Check the fixup on the instruction.
# COM: INSTR - Check the instruction is handled properly by the ASMPrinter
# Check prefixes:
# RELOC - Check the relocation in the object.
# FIXUP - Check the fixup on the instruction.
# INSTR - Check the instruction is handled properly by the ASMPrinter
.long foo
# RELOC: R_RISCV_32 foo

View File

@ -9,11 +9,11 @@
# RUN: | llvm-objdump -d -r --mattr=+experimental-b - \
# RUN: | FileCheck -check-prefixes=CHECK-S-OBJ %s
# COM: The following check prefixes are used in this test:
# COM: CHECK-S-OBJ Match both the .s and objdumped object output with
# COM: aliases enabled
# COM: CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with
# COM: aliases disabled
# The following check prefixes are used in this test:
# CHECK-S-OBJ Match both the .s and objdumped object output with
# aliases enabled
# CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with
# aliases disabled
# CHECK-S-OBJ-NOALIAS: andi t0, t1, 255
# CHECK-S-OBJ: zext.b t0, t1

View File

@ -9,11 +9,11 @@
# RUN: | llvm-objdump -d -r --mattr=+experimental-b - \
# RUN: | FileCheck -check-prefixes=CHECK-S-OBJ %s
# COM: The following check prefixes are used in this test:
# COM: CHECK-S-OBJ Match both the .s and objdumped object output with
# COM: aliases enabled
# COM: CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with
# COM: aliases disabled
# The following check prefixes are used in this test:
# CHECK-S-OBJ Match both the .s and objdumped object output with
# aliases enabled
# CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with
# aliases disabled
# CHECK-S-OBJ-NOALIAS: andi t0, t1, 255
# CHECK-S-OBJ: zext.b t0, t1

View File

@ -19,15 +19,15 @@
# RUN: | llvm-objdump -d --mattr=+a - \
# RUN: | FileCheck -check-prefixes=CHECK-OBJ,CHECK-S-OBJ %s
# COM: The following check prefixes are used in this test:
# COM: CHECK-S Match the .s output with aliases enabled
# COM: CHECK-S-NOALIAS Match the .s output with aliases disabled
# COM: CHECK-OBJ Match the objdumped object output with aliases enabled
# COM: CHECK-OBJ-NOALIAS Match the objdumped object output with aliases enabled
# COM: CHECK-S-OBJ Match both the .s and objdumped object output with
# COM: aliases enabled
# COM: CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with
# COM: aliases disabled
# The following check prefixes are used in this test:
# CHECK-S Match the .s output with aliases enabled
# CHECK-S-NOALIAS Match the .s output with aliases disabled
# CHECK-OBJ Match the objdumped object output with aliases enabled
# CHECK-OBJ-NOALIAS Match the objdumped object output with aliases enabled
# CHECK-S-OBJ Match both the .s and objdumped object output with
# aliases enabled
# CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with
# aliases disabled
# The below tests for lr.w, sc.w and amo*.w, using `0(reg)` are actually
# implemented using a custom parser, but we test them as if they're aliases.

View File

@ -19,15 +19,15 @@
# RUN: | llvm-objdump -d -r - \
# RUN: | FileCheck -check-prefixes=CHECK-OBJ,CHECK-S-OBJ %s
# COM: The following check prefixes are used in this test:
# COM: CHECK-S Match the .s output with aliases enabled
# COM: CHECK-S-NOALIAS Match the .s output with aliases disabled
# COM: CHECK-OBJ Match the objdumped object output with aliases enabled
# COM: CHECK-OBJ-NOALIAS Match the objdumped object output with aliases enabled
# COM: CHECK-S-OBJ Match both the .s and objdumped object output with
# COM: aliases enabled
# COM: CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with
# COM: aliases disabled
# The following check prefixes are used in this test:
# CHECK-S Match the .s output with aliases enabled
# CHECK-S-NOALIAS Match the .s output with aliases disabled
# CHECK-OBJ Match the objdumped object output with aliases enabled
# CHECK-OBJ-NOALIAS Match the objdumped object output with aliases enabled
# CHECK-S-OBJ Match both the .s and objdumped object output with
# aliases enabled
# CHECK-S-OBJ-NOALIAS Match both the .s and objdumped object output with
# aliases disabled
# TODO la
# TODO lb lh lw

View File

@ -95,8 +95,8 @@ define float @test_shrink_libcall_trunc(float %C) {
ret float %F
}
; COM: This is replaced with the intrinsic, which does the right thing on CHECK
; COM: platforms.
; This is replaced with the intrinsic, which does the right thing on
; CHECK platforms.
define float @test_shrink_libcall_fabs(float %C) {
; CHECK-LABEL: @test_shrink_libcall_fabs(
; CHECK-NEXT: [[F:%.*]] = call float @llvm.fabs.f32(float [[C:%.*]])

View File

@ -3,7 +3,7 @@
@B = common global [1024 x i32] zeroinitializer, align 16
; Check that the two candidates for fusion are placed into separate candidate
; CHECK that the two candidates for fusion are placed into separate candidate
; sets because they are not control flow equivalent.
; CHECK: Performing Loop Fusion on function non_cfe

View File

@ -1,6 +1,6 @@
## In this test we test how machine-specific dynamic tags are dumped.
## COM: Case 1: Test that hexagon machine-specific tags can be dumped.
## Case 1: Test that hexagon machine-specific tags can be dumped.
# RUN: yaml2obj --docnum=1 -o %t.hex %s
# RUN: llvm-objdump -p %t.hex | FileCheck %s --check-prefix=HEXAGON
@ -35,8 +35,8 @@ ProgramHeaders:
Sections:
- Section: .dynamic
## COM: Case 2: Test that MIPS machine-specific tags can be dumped.
## COM: MIPS has a few long tag names. Show that we indent columns properly.
## Case 2: Test that MIPS machine-specific tags can be dumped.
## MIPS has a few long tag names. Show that we indent columns properly.
# RUN: yaml2obj --docnum=2 -o %t.mips %s
# RUN: llvm-objdump -p %t.mips | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=MIPS
@ -197,7 +197,7 @@ ProgramHeaders:
Sections:
- Section: .dynamic
## COM: Case 3: Test that PPC machine-specific tags can be dumped.
## Case 3: Test that PPC machine-specific tags can be dumped.
# RUN: yaml2obj --docnum=3 -o %t.ppc %s
# RUN: llvm-objdump -p %t.ppc | FileCheck %s --check-prefix=PPC
@ -229,7 +229,7 @@ ProgramHeaders:
Sections:
- Section: .dynamic
## COM: Case 4: Test that PPC64 machine-specific tags can be dumped.
## Case 4: Test that PPC64 machine-specific tags can be dumped.
# RUN: yaml2obj --docnum=4 -o %t.ppc64 %s
# RUN: llvm-objdump -p %t.ppc64 | FileCheck %s --check-prefix=PPC64
@ -258,7 +258,7 @@ ProgramHeaders:
Sections:
- Section: .dynamic
## COM: Case 5: Test that AARCH64 machine-specific tags can be dumped.
## Case 5: Test that AARCH64 machine-specific tags can be dumped.
# RUN: yaml2obj --docnum=5 -o %t.aarch64 %s
# RUN: llvm-objdump -p %t.aarch64 | FileCheck %s --check-prefix=AARCH64

View File

@ -1,5 +1,5 @@
## COM: Show that all RISCV specific section types are properly printed for both
## COM: LLVM and GNU styles.
## Show that all RISCV specific section types are properly printed for both
## LLVM and GNU styles.
# RUN: yaml2obj %s -o %t-riscv.o
# RUN: llvm-readobj --section-headers %t-riscv.o | FileCheck %s --check-prefix=LLVM

View File

@ -1,5 +1,5 @@
# COM: Show that all regular section types are properly printed for both LLVM and
# COM: GNU styles.
# Show that all regular section types are properly printed for both LLVM and
# GNU styles.
# RUN: yaml2obj %s -o %t-basic.o
# RUN: llvm-readobj --section-headers %t-basic.o | FileCheck %s --check-prefix=LLVM

View File

@ -1,5 +1,5 @@
# COM: Show that llvm-readobj can print symbol bindings correctly for both LLVM and
# COM: GNU styles, including for symbol bindings that are not recognised.
# Show that llvm-readobj can print symbol bindings correctly for both LLVM and
# GNU styles, including for symbol bindings that are not recognised.
# RUN: yaml2obj %s -o %t
# RUN: llvm-readobj --symbols --dyn-symbols %t | FileCheck %s --check-prefix=LLVM