From 0e29f7e5af0d4b5c1369fc5052b94476eadde83c Mon Sep 17 00:00:00 2001
From: Ian Lance Taylor <iant@google.com>
Date: Tue, 7 Dec 2010 19:28:44 +0000
Subject: [PATCH] re PR tree-optimization/46805 (ICE: SIGSEGV in
 optab_for_tree_code (optabs.c:407) with -O -fno-tree-scev-cprop
 -ftree-vectorize)

	PR tree-optimization/46805
	PR tree-optimization/46833
	* go-lang.c (go_langhook_type_for_mode): Handle vector modes.

From-SVN: r167563
---
 gcc/go/ChangeLog |  6 ++++++
 gcc/go/go-lang.c | 14 ++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog
index d70dc40c4c6c..380c70955f1c 100644
--- a/gcc/go/ChangeLog
+++ b/gcc/go/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-07  Ian Lance Taylor  <iant@google.com>
+
+	PR tree-optimization/46805
+	PR tree-optimization/46833
+	* go-lang.c (go_langhook_type_for_mode): Handle vector modes.
+
 2010-12-06  Ian Lance Taylor  <iant@google.com>
 
 	PR other/46789
diff --git a/gcc/go/go-lang.c b/gcc/go/go-lang.c
index 0f3c1838f4b7..323f8c5331c9 100644
--- a/gcc/go/go-lang.c
+++ b/gcc/go/go-lang.c
@@ -285,6 +285,20 @@ go_langhook_type_for_size (unsigned int bits, int unsignedp)
 static tree
 go_langhook_type_for_mode (enum machine_mode mode, int unsignedp)
 {
+  /* Go has no vector types.  Build them here.  FIXME: It does not
+     make sense for the middle-end to ask the frontend for a type
+     which the frontend does not support.  However, at least for now
+     it is required.  See PR 46805.  */
+  if (VECTOR_MODE_P (mode))
+    {
+      tree inner;
+
+      inner = go_langhook_type_for_mode (GET_MODE_INNER (mode), unsignedp);
+      if (inner != NULL_TREE)
+	return build_vector_type_for_mode (inner, mode);
+      return NULL_TREE;
+    }
+
   return go_type_for_mode (mode, unsignedp);
 }
 
-- 
GitLab