From 8ab2ac7308cde26aa3fd7e9c5caddc8f789911ef Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 30 Jun 2020 18:43:24 +0200 Subject: ortho/gcc: build vector types in type_for_mode. Fix #1384 --- src/ortho/gcc/ortho-lang-49.c | 8 ++++++++ src/ortho/gcc/ortho-lang-5.c | 8 ++++++++ src/ortho/gcc/ortho-lang-6.c | 8 ++++++++ src/ortho/gcc/ortho-lang-7.c | 8 ++++++++ src/ortho/gcc/ortho-lang-8.c | 8 ++++++++ src/ortho/gcc/ortho-lang-9.c | 8 ++++++++ 6 files changed, 48 insertions(+) (limited to 'src/ortho') diff --git a/src/ortho/gcc/ortho-lang-49.c b/src/ortho/gcc/ortho-lang-49.c index f73965615..3e29f0a14 100644 --- a/src/ortho/gcc/ortho-lang-49.c +++ b/src/ortho/gcc/ortho-lang-49.c @@ -722,6 +722,14 @@ type_for_mode (enum machine_mode mode, int unsignedp) if (mode == TYPE_MODE (long_double_type_node)) return long_double_type_node; + if (VECTOR_MODE_P (mode)) + { + machine_mode inner_mode = GET_MODE_INNER (mode); + tree inner_type = type_for_mode (inner_mode, unsignedp); + if (inner_type) + return build_vector_type_for_mode (inner_type, mode); + } + return NULL_TREE; } diff --git a/src/ortho/gcc/ortho-lang-5.c b/src/ortho/gcc/ortho-lang-5.c index 6dedb14b0..3e046f7a3 100644 --- a/src/ortho/gcc/ortho-lang-5.c +++ b/src/ortho/gcc/ortho-lang-5.c @@ -709,6 +709,14 @@ type_for_mode (enum machine_mode mode, int unsignedp) if (mode == TYPE_MODE (long_double_type_node)) return long_double_type_node; + if (VECTOR_MODE_P (mode)) + { + machine_mode inner_mode = GET_MODE_INNER (mode); + tree inner_type = type_for_mode (inner_mode, unsignedp); + if (inner_type) + return build_vector_type_for_mode (inner_type, mode); + } + return NULL_TREE; } diff --git a/src/ortho/gcc/ortho-lang-6.c b/src/ortho/gcc/ortho-lang-6.c index 639356085..bd989d9a8 100644 --- a/src/ortho/gcc/ortho-lang-6.c +++ b/src/ortho/gcc/ortho-lang-6.c @@ -709,6 +709,14 @@ type_for_mode (enum machine_mode mode, int unsignedp) if (mode == TYPE_MODE (long_double_type_node)) return long_double_type_node; + if (VECTOR_MODE_P (mode)) + { + machine_mode inner_mode = GET_MODE_INNER (mode); + tree inner_type = type_for_mode (inner_mode, unsignedp); + if (inner_type) + return build_vector_type_for_mode (inner_type, mode); + } + return NULL_TREE; } diff --git a/src/ortho/gcc/ortho-lang-7.c b/src/ortho/gcc/ortho-lang-7.c index f871bf93c..e9c0d47c8 100644 --- a/src/ortho/gcc/ortho-lang-7.c +++ b/src/ortho/gcc/ortho-lang-7.c @@ -718,6 +718,14 @@ type_for_mode (enum machine_mode mode, int unsignedp) if (mode == TYPE_MODE (long_double_type_node)) return long_double_type_node; + if (VECTOR_MODE_P (mode)) + { + machine_mode inner_mode = GET_MODE_INNER (mode); + tree inner_type = type_for_mode (inner_mode, unsignedp); + if (inner_type) + return build_vector_type_for_mode (inner_type, mode); + } + return NULL_TREE; } diff --git a/src/ortho/gcc/ortho-lang-8.c b/src/ortho/gcc/ortho-lang-8.c index de5080036..350504cdf 100644 --- a/src/ortho/gcc/ortho-lang-8.c +++ b/src/ortho/gcc/ortho-lang-8.c @@ -719,6 +719,14 @@ type_for_mode (enum machine_mode mode, int unsignedp) if (mode == TYPE_MODE (long_double_type_node)) return long_double_type_node; + if (VECTOR_MODE_P (mode)) + { + machine_mode inner_mode = GET_MODE_INNER (mode); + tree inner_type = type_for_mode (inner_mode, unsignedp); + if (inner_type) + return build_vector_type_for_mode (inner_type, mode); + } + return NULL_TREE; } diff --git a/src/ortho/gcc/ortho-lang-9.c b/src/ortho/gcc/ortho-lang-9.c index 5a5ac8859..b027f0d6d 100644 --- a/src/ortho/gcc/ortho-lang-9.c +++ b/src/ortho/gcc/ortho-lang-9.c @@ -719,6 +719,14 @@ type_for_mode (enum machine_mode mode, int unsignedp) if (mode == TYPE_MODE (long_double_type_node)) return long_double_type_node; + if (VECTOR_MODE_P (mode)) + { + machine_mode inner_mode = GET_MODE_INNER (mode); + tree inner_type = type_for_mode (inner_mode, unsignedp); + if (inner_type) + return build_vector_type_for_mode (inner_type, mode); + } + return NULL_TREE; } -- cgit v1.2.3