Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] main from MaxMood96:main #52

Merged
merged 15 commits into from
Sep 6, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion clang/lib/CodeGen/TargetInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1170,7 +1170,8 @@ class X86_32ABIInfo : public SwiftABIInfo {
IsRetSmallStructInRegABI(RetSmallStructInRegABI),
IsWin32StructABI(Win32StructABI), IsSoftFloatABI(SoftFloatABI),
IsMCUABI(CGT.getTarget().getTriple().isOSIAMCU()),
IsLinuxABI(CGT.getTarget().getTriple().isOSLinux()),
IsLinuxABI(CGT.getTarget().getTriple().isOSLinux() ||
CGT.getTarget().getTriple().isOSCygMing()),
DefaultNumRegisterParameters(NumRegisterParameters) {}

bool shouldPassIndirectlyForSwift(ArrayRef<llvm::Type*> scalars,
Expand Down
3 changes: 3 additions & 0 deletions clang/test/CodeGen/x86_32-align-linux.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
// RUN: %clang_cc1 -w -fblocks -ffreestanding -triple i386-pc-linux-gnu -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -w -fblocks -ffreestanding -triple i386-pc-linux-gnu -target-feature +avx -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -w -fblocks -ffreestanding -triple i386-pc-linux-gnu -target-feature +avx512f -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -w -fblocks -ffreestanding -triple i386-pc-linux-mingw -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -w -fblocks -ffreestanding -triple i386-pc-linux-mingw -target-feature +avx -emit-llvm -o - %s | FileCheck %s
// RUN: %clang_cc1 -w -fblocks -ffreestanding -triple i386-pc-linux-mingw -target-feature +avx512f -emit-llvm -o - %s | FileCheck %s

#include <immintrin.h>

Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaOpenCL/access-qualifier.cl
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ kernel void read_write_twice_typedef(read_write img1d_rw i){} // expected-warnin
// expected-note@-67 {{previously declared 'read_write' here}}
#endif

#if OPENCL_C_VERSION__ >= 200
#if __OPENCL_C_VERSION__ >= 200
void myPipeWrite(write_only pipe int); // expected-note {{passing argument to parameter here}}
kernel void k14(read_only pipe int p) {
myPipeWrite(p); // expected-error {{passing '__private read_only pipe int' to parameter of incompatible type 'write_only pipe int'}}
Expand Down
2 changes: 1 addition & 1 deletion flang/include/flang/Frontend/FrontendActions.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ class ParseSyntaxOnlyAction : public PrescanAndSemaAction {
};

class PluginParseTreeAction : public PrescanAndSemaAction {
void ExecuteAction() override;
void ExecuteAction() override = 0;
};

} // namespace Fortran::frontend
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding01.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1

! Test intrinsic operation folding

Expand Down
4 changes: 2 additions & 2 deletions flang/test/Evaluate/folding02.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1

! Check intrinsic function folding with host runtime library

module m
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding03.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test operation folding edge case (both expected value and messages)
! These tests make assumptions regarding real(4) and integer(4) extrema.

Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding04.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test intrinsic function folding edge case (both expected value and messages)
! These tests make assumptions regarding real(4) extrema.

Expand Down
Binary file modified flang/test/Evaluate/folding05.f90
Binary file not shown.
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding06.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test transformational intrinsic function folding

module m
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding07.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test numeric model inquiry intrinsics

module m
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding08.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test folding of LBOUND and UBOUND

module m
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding09.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test folding of IS_CONTIGUOUS on simply contiguous items (9.5.4)
! When IS_CONTIGUOUS() is constant, it's .TRUE.

Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding10.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Tests folding of SHAPE(TRANSFER(...))

module m
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding11.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
module m
complex, parameter :: z1 = 1. + (2., 3.)
logical, parameter :: test_z1 = z1 == (3., 3.)
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding12.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test folding of structure constructors
module m1
type parent_type
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding13.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test folding of array constructors with constant implied DO bounds;
! their indices are constant expressions and can be used as such.
module m1
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding14.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test folding of isnan() extension
module m1
logical, parameter :: results(*) = isnan([ &
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding15.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test folding of array constructors with duplicate names for the implied
! DO variables
module m1
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding16.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Ensure that lower bounds are accounted for in intrinsic folding;
! this is a regression test for a bug in which they were not
module m
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding17.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test implementations of STORAGE_SIZE() and SIZEOF() as expression rewrites
module m1
type :: t1
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding18.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Test implementations of IEEE inquiry functions
module m
use ieee_arithmetic
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding20.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Tests reduction intrinsic function folding
module m
implicit none
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding21.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Check array sizes with varying extents, including extents where the upper
! bound is less than the lower bound
module m
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding22.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1

! Test character concatenation folding

Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding23.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Tests folding of EOSHIFT (valid cases)
module m
integer, parameter :: arr(2,3) = reshape([1, 2, 3, 4, 5, 6], shape(arr))
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding24.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Tests folding of PACK (valid cases)
module m
integer, parameter :: arr(2,3) = reshape([1, 2, 3, 4, 5, 6], shape(arr))
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding25.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Tests folding of UNPACK (valid cases)
module m
integer, parameter :: vector(*) = [1, 2, 3, 4]
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding26.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Tests folding of TRANSPOSE
module m
integer, parameter :: matrix(0:1,0:2) = reshape([1,2,3,4,5,6],shape(matrix))
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Evaluate/folding27.f90
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
! RUN: %S/test_folding.sh %s %t %flang_fc1
! REQUIRES: shell
! RUN: %python %S/test_folding.py %s %flang_fc1
! Tests folding of CSHIFT (valid cases)
module m
integer, parameter :: arr(2,3) = reshape([1, 2, 3, 4, 5, 6], shape(arr))
Expand Down
155 changes: 155 additions & 0 deletions flang/test/Evaluate/test_folding.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#!/usr/bin/env python3

"""This script verifies expression folding.
It compiles a source file with '-fdebug-dump-symbols'
and looks for parameter declarations to check
they have been folded as expected.
To check folding of an expression EXPR,
the fortran program passed to this script
must contain the following:

logical, parameter :: test_x = <compare EXPR to expected value>

This script will test that all parameter
with a name starting with "test_"
have been folded to .true.
For instance, acos folding can be tested with:

real(4), parameter :: res_acos = acos(0.5_4)
real(4), parameter :: exp_acos = 1.047
logical, parameter :: test_acos = abs(res_acos - exp_acos).LE.(0.001_4)

There are two kinds of failure:
- test_x is folded to .false..
This means the expression was folded
but the value is not as expected.
- test_x is not folded (it is neither .true. nor .false.).
This means the compiler could not fold the expression.

Parameters:
sys.argv[1]: a source file with contains the input and expected output
sys.argv[2]: the Flang frontend driver
sys.argv[3:]: Optional arguments to the Flang frontend driver"""

import os
import sys
import tempfile
import re
import subprocess

from difflib import unified_diff
from pathlib import Path

def check_args(args):
"""Verifies that the number is arguments passed is correct."""
if len(args) < 3:
print(f"Usage: {args[0]} <fortran-source> <flang-command>")
sys.exit(1)

def set_source(source):
"""Sets the path to the source files."""
if not Path(source).is_file():
print(f"File not found: {src}")
sys.exit(1)
return Path(source)

def set_executable(exe):
"""Sets the path to the Flang frontend driver."""
if not Path(exe).is_file():
print(f"Flang was not found: {exe}")
sys.exit(1)
return str(Path(exe))

check_args(sys.argv)
cwd = os.getcwd()
srcdir = set_source(sys.argv[1]).resolve()
with open(srcdir, 'r', encoding="utf-8") as f:
src = f.readlines()
src1 = ""
src2 = ""
src3 = ""
src4 = ""
messages = ""
actual_warnings = ""
expected_warnings = ""
warning_diffs = ""

flang_fc1 = set_executable(sys.argv[2])
flang_fc1_args = sys.argv[3:]
flang_fc1_options = ""
LIBPGMATH = os.getenv('LIBPGMATH')
if LIBPGMATH:
flang_fc1_options = ["-fdebug-dump-symbols", "-DTEST_LIBPGMATH"]
print("Assuming libpgmath support")
else:
flang_fc1_options = ["-fdebug-dump-symbols"]
print("Not assuming libpgmath support")

cmd = [flang_fc1, *flang_fc1_args, *flang_fc1_options, str(srcdir)]
with tempfile.TemporaryDirectory() as tmpdir:
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
check=True, universal_newlines=True, cwd=tmpdir)
src1 = proc.stdout
messages = proc.stderr

for line in src1.split("\n"):
m = re.search(r"(\w*)(?=, PARAMETER).*init:(.*)", line)
if m:
src2 += f"{m.group(1)} {m.group(2)}\n"

for line in src2.split("\n"):
m = re.match(r"test_*", line)
if m:
src3 += f"{m.string}\n"

for passed_results, line in enumerate(src3.split("\n")):
m = re.search(r"\.false\._.$", line)
if m:
src4 += f"{line}\n"

for line in messages.split("\n"):
m = re.search(r"[^:]*:(\d*):\d*: (.*)", line)
if m:
actual_warnings += f"{m.group(1)}: {m.group(2)}\n"

passed_warnings = 0
warnings = []
for i, line in enumerate(src, 1):
m = re.search(r"(?:!WARN:)(.*)", line)
if m:
warnings.append(m.group(1))
continue
if warnings:
for x in warnings:
passed_warnings += 1
expected_warnings += f"{i}:{x}\n"
warnings = []

for line in unified_diff(actual_warnings.split("\n"),
expected_warnings.split("\n"), n=0):
line = re.sub(r"(^\-)(\d+:)", r"\nactual at \g<2>", line)
line = re.sub(r"(^\+)(\d+:)", r"\nexpect at \g<2>", line)
warning_diffs += line

if src4 or warning_diffs:
print("Folding test failed:")
# Prints failed tests, including parameters with the same
# suffix so that more information can be obtained by declaring
# expected_x and result_x
if src4:
for line in src4.split("\n"):
m = re.match(r"test_(\w+)", line)
if m:
for line in src2.split("\n"):
if m.group(1) in line:
print(line)
if warning_diffs:
print(warning_diffs)
print()
print("FAIL")
sys.exit(1)
else:
print()
print(f"All {passed_results+passed_warnings} tests passed")
print("PASS")

Loading