diff mbox

[hsa] Use newly added hsa_op_immed ctor.

Message ID 55EF40B8.2080702@suse.cz
State New
Headers show

Commit Message

Martin Liška Sept. 8, 2015, 8:10 p.m. UTC
Hello.

Following patch uses new hsa_op_immed ctor, which is mainly used in
HSAIL emission of instructions that generate kernel from kernel dispatching.

Martin
diff mbox

Patch

From 7cf50d2831ec8b161858ecdbfb19b6287230384d Mon Sep 17 00:00:00 2001
From: mliska <mliska@suse.cz>
Date: Fri, 4 Sep 2015 14:19:25 +0200
Subject: [PATCH 2/7] HSA: use newly added hsa_op_immed ctor.

gcc/ChangeLog:

2015-09-04  Martin Liska  <mliska@suse.cz>

	* hsa-gen.c (gen_hsa_insns_for_bitfield_load): Use newly added
	ctor for hsa_op_immed.
	(gen_hsa_insns_for_store): Likewise.
	(gen_hsa_binary_operation): Use newly added function set_type.
	(gen_hsa_insns_for_operation_assignment): Use newly added
	ctor for hsa_op_immed.
	(gen_hsa_insns_for_kernel_call): Likewise.
---
 gcc/hsa-gen.c | 57 +++++++++++++++++++++++----------------------------------
 1 file changed, 23 insertions(+), 34 deletions(-)

diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c
index ed1e121..39c0489 100644
--- a/gcc/hsa-gen.c
+++ b/gcc/hsa-gen.c
@@ -1792,8 +1792,7 @@  gen_hsa_insns_for_bitfield_load (hsa_op_reg *dest, hsa_op_address *addr,
   if (left_shift)
     {
       hsa_op_reg *value_reg_2 = new hsa_op_reg (dest->type);
-      hsa_op_immed *c = new hsa_op_immed (build_int_cstu (unsigned_type_node,
-							  left_shift));
+      hsa_op_immed *c = new hsa_op_immed (left_shift, BRIG_TYPE_U32);
 
       hsa_insn_basic *lshift = new hsa_insn_basic
 	(3, BRIG_OPCODE_SHL, value_reg_2->type, value_reg_2, value_reg, c);
@@ -1806,8 +1805,7 @@  gen_hsa_insns_for_bitfield_load (hsa_op_reg *dest, hsa_op_address *addr,
   if (right_shift)
     {
       hsa_op_reg *value_reg_2 = new hsa_op_reg (dest->type);
-      hsa_op_immed *c = new hsa_op_immed (build_int_cstu (unsigned_type_node,
-							  right_shift));
+      hsa_op_immed *c = new hsa_op_immed (right_shift, BRIG_TYPE_U32);
 
       hsa_insn_basic *rshift = new hsa_insn_basic
 	(3, BRIG_OPCODE_SHR, value_reg_2->type, value_reg_2, value_reg, c);
@@ -2074,8 +2072,7 @@  gen_hsa_insns_for_store (tree lhs, hsa_op_base *src, hsa_bb *hbb,
       hsa_op_reg *cleared_reg = new hsa_op_reg (mem_type);
 
       hsa_op_immed *c = new hsa_op_immed
-	(build_int_cstu (get_integer_tree_type_by_bytes
-			 (type_bitsize / BITS_PER_UNIT), mask));
+	(mask, get_integer_type_by_bytes (type_bitsize / BITS_PER_UNIT, false));
 
       hsa_insn_basic *clearing = new hsa_insn_basic
 	(3, BRIG_OPCODE_AND, mem_type, cleared_reg, value_reg, c);
@@ -2091,8 +2088,7 @@  gen_hsa_insns_for_store (tree lhs, hsa_op_base *src, hsa_bb *hbb,
       if (bitpos)
 	{
 	  hsa_op_reg *shifted_value_reg = new hsa_op_reg (mem_type);
-
-	  c = new hsa_op_immed (build_int_cstu (unsigned_type_node, bitpos));
+	  c = new hsa_op_immed (bitpos, BRIG_TYPE_U32);
 
 	  hsa_insn_basic *basic = new hsa_insn_basic
 	    (3, BRIG_OPCODE_SHL, mem_type, shifted_value_reg, new_value_reg, c);
@@ -2402,8 +2398,7 @@  gen_hsa_binary_operation (int opcode, hsa_op_reg *dest,
       && is_a <hsa_op_immed *> (op2))
     {
       hsa_op_immed *i = dyn_cast <hsa_op_immed *> (op2);
-      op2 = new hsa_op_immed
-	(build_int_cstu (unsigned_type_node, TREE_INT_CST_LOW (i->tree_value)));
+      i->set_type (BRIG_TYPE_U32);
     }
 
   hsa_insn_basic *insn = new hsa_insn_basic (3, opcode, dest->type, dest,
@@ -2521,17 +2516,13 @@  gen_hsa_insns_for_operation_assignment (gimple assign, hsa_bb *hbb,
 
 	hsa_op_with_type *shift2 = NULL;
 	if (TREE_CODE (rhs2) == INTEGER_CST)
-	  {
-	    shift2 = new hsa_op_immed
-	      (build_int_cstu (unsigned_type_node,
-			       bitsize - tree_to_uhwi (rhs2)));
-	  }
+	  shift2 = new hsa_op_immed (bitsize - tree_to_uhwi (rhs2),
+				     BRIG_TYPE_U32);
 	else if (TREE_CODE (rhs2) == SSA_NAME)
 	  {
 	    hsa_op_reg *s = hsa_reg_for_gimple_ssa (rhs2, ssa_map);
 	    hsa_op_reg *d = new hsa_op_reg (s->type);
-	    hsa_op_immed *size_imm = new hsa_op_immed
-	      (build_int_cstu (unsigned_type_node, bitsize));
+	    hsa_op_immed *size_imm = new hsa_op_immed (bitsize, BRIG_TYPE_U32);
 
 	    insn = new hsa_insn_basic (3, BRIG_OPCODE_SUB, d->type,
 				       d, s, size_imm);
@@ -2921,7 +2912,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
   addr = new hsa_op_address (shadow_reg, offsetof (hsa_kernel_dispatch, debug));
 
   /* Create a magic number that is going to be printed by libgomp.  */
-  c = new hsa_op_immed (build_int_cstu (uint64_type_node, 1000 + index));
+  c = new hsa_op_immed (1000 + index, BRIG_TYPE_U64);
   mem = new hsa_insn_mem (BRIG_OPCODE_ST, BRIG_TYPE_U64, c, addr);
   hbb->append_insn (mem);
 
@@ -2968,7 +2959,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
   /* Store to synchronization signal.  */
   hbb->append_insn (new hsa_insn_comment ("store 1 to signal handle"));
 
-  c = new hsa_op_immed (build_int_cstu (uint64_type_node, 1));
+  c = new hsa_op_immed (1, BRIG_TYPE_U64);
 
   hsa_insn_signal *signal= new hsa_insn_signal (2, BRIG_OPCODE_SIGNALNORET,
 						BRIG_ATOMIC_ST, BRIG_TYPE_B64,
@@ -3002,7 +2993,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
   /* Get a write index to the command queue.  */
   hsa_op_reg *queue_index_reg = new hsa_op_reg (BRIG_TYPE_U64);
 
-  c = new hsa_op_immed (build_int_cstu (uint64_type_node, 1));
+  c = new hsa_op_immed (1, BRIG_TYPE_U64);
   hsa_insn_queue *queue = new hsa_insn_queue (3,
 					      BRIG_OPCODE_ADDQUEUEWRITEINDEX);
 
@@ -3018,7 +3009,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 
   hsa_op_reg *queue_addr_reg = new hsa_op_reg (BRIG_TYPE_U64);
 
-  c = new hsa_op_immed (build_int_cstu (uint64_type_node, addr_offset));
+  c = new hsa_op_immed (addr_offset, BRIG_TYPE_U64);
   hsa_insn_basic *insn = new hsa_insn_basic
     (3, BRIG_OPCODE_ADD, BRIG_TYPE_U64, queue_addr_reg, queue_reg, c);
 
@@ -3033,8 +3024,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 			  addr);
   hbb->append_insn (mem);
 
-  c = new  hsa_op_immed (build_int_cstu (uint64_type_node,
-					 sizeof (hsa_queue_packet)));
+  c = new hsa_op_immed (sizeof (hsa_queue_packet), BRIG_TYPE_U64);
   hsa_op_reg *queue_packet_offset_reg = new hsa_op_reg (BRIG_TYPE_U64);
   insn = new hsa_insn_basic
     (3, BRIG_OPCODE_MUL, BRIG_TYPE_U64, queue_packet_offset_reg,
@@ -3067,7 +3057,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
   hbb->append_insn (cvtinsn);
 
   hsa_op_reg *packet_setup_u32_2 = new hsa_op_reg (BRIG_TYPE_U32);
-  c = new hsa_op_immed (build_int_cstu (uint32_type_node, 1));
+  c = new hsa_op_immed (1, BRIG_TYPE_U32);
   insn = new hsa_insn_basic (3, BRIG_OPCODE_OR, BRIG_TYPE_U32,
 			     packet_setup_u32_2, packet_setup_u32, c);
 
@@ -3090,7 +3080,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 
   addr = new hsa_op_address (queue_packet_reg,
 			     offsetof (hsa_queue_packet, grid_size_x));
-  c = new hsa_op_immed (build_int_cstu (uint16_type_node, 64), false);
+  c = new hsa_op_immed (64, BRIG_TYPE_U16);
   mem = new hsa_insn_mem (BRIG_OPCODE_ST, BRIG_TYPE_U16, c, addr);
   hbb->append_insn (mem);
 
@@ -3099,7 +3089,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 
   addr = new hsa_op_address (queue_packet_reg,
 			     offsetof (hsa_queue_packet, workgroup_size_x));
-  c = new hsa_op_immed (build_int_cstu (uint16_type_node, 64), false);
+  c = new hsa_op_immed (64, BRIG_TYPE_U16);
   mem = new hsa_insn_mem (BRIG_OPCODE_ST, BRIG_TYPE_U16, c, addr);
   hbb->append_insn (mem);
 
@@ -3108,7 +3098,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 
   addr = new hsa_op_address (queue_packet_reg,
 			     offsetof (hsa_queue_packet, grid_size_y));
-  c = new hsa_op_immed (build_int_cstu (uint16_type_node, 1), false);
+  c = new hsa_op_immed (1, BRIG_TYPE_U16);
   mem = new hsa_insn_mem (BRIG_OPCODE_ST, BRIG_TYPE_U16, c, addr);
   hbb->append_insn (mem);
 
@@ -3117,7 +3107,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 
   addr = new hsa_op_address (queue_packet_reg,
 			     offsetof (hsa_queue_packet, workgroup_size_y));
-  c = new hsa_op_immed (build_int_cstu (uint16_type_node, 1), false);
+  c = new hsa_op_immed (1, BRIG_TYPE_U16);
   mem = new hsa_insn_mem (BRIG_OPCODE_ST, BRIG_TYPE_U16, c, addr);
   hbb->append_insn (mem);
 
@@ -3126,7 +3116,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 
   addr = new hsa_op_address (queue_packet_reg,
 			     offsetof (hsa_queue_packet, grid_size_z));
-  c = new hsa_op_immed (build_int_cstu (uint16_type_node, 1), false);
+  c = new hsa_op_immed (1, BRIG_TYPE_U16);
   mem = new hsa_insn_mem (BRIG_OPCODE_ST, BRIG_TYPE_U16, c, addr);
   hbb->append_insn (mem);
 
@@ -3135,7 +3125,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 
   addr = new hsa_op_address (queue_packet_reg,
 			     offsetof (hsa_queue_packet, workgroup_size_z));
-  c = new hsa_op_immed (build_int_cstu (uint16_type_node, 1), false);
+  c = new hsa_op_immed (1, BRIG_TYPE_U16);
   mem = new hsa_insn_mem (BRIG_OPCODE_ST, BRIG_TYPE_U16, c, addr);
   hbb->append_insn (mem);
 
@@ -3250,7 +3240,7 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
 			     offsetof (hsa_queue_packet, header));
 
   /* Store 5122 << 16 + 1 to packet->header.  */
-  c = new hsa_op_immed (build_int_cstu (uint32_type_node, 70658));
+  c = new hsa_op_immed (70658, BRIG_TYPE_U32);
 
   hsa_insn_atomic *atomic = new hsa_insn_atomic (2, BRIG_OPCODE_ATOMICNORET,
 						 BRIG_ATOMIC_ST, BRIG_TYPE_B32,
@@ -3280,9 +3270,8 @@  gen_hsa_insns_for_kernel_call (hsa_bb *hbb, gcall *call)
   hbb->append_insn (new hsa_insn_comment ("wait for the signal"));
 
   hsa_op_reg *signal_result_reg = new hsa_op_reg (BRIG_TYPE_U64);
-  c = new  hsa_op_immed (build_int_cst (long_integer_type_node, 1));
-  hsa_op_immed *c2 = new hsa_op_immed
-    (TYPE_MAX_VALUE (uint64_type_node));
+  c = new hsa_op_immed (1, BRIG_TYPE_S64);
+  hsa_op_immed *c2 = new hsa_op_immed (UINT64_MAX, BRIG_TYPE_U64);
 
   signal = new hsa_insn_signal (4, BRIG_OPCODE_SIGNAL,
 				BRIG_ATOMIC_WAITTIMEOUT_LT, BRIG_TYPE_S64);
-- 
2.4.6