2013-10-01  Kugan Vivekanandarajah  <kuganv@linaro.org>

	gcc/
	PR target/58578
	Revert
	2013-04-05  Greta Yorsh  <Greta.Yorsh@arm.com>
	* config/arm/arm.md (arm_ashldi3_1bit):  define_insn into
	define_insn_and_split.
	(arm_ashrdi3_1bit,arm_lshrdi3_1bit): Likewise.
	(shiftsi3_compare): New pattern.
	(rrx): New pattern.
	* config/arm/unspecs.md (UNSPEC_RRX): New.

	gcc/testsuite
	PR target/58578
	* gcc.target/arm/pr58578.c: New test.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203059 138bc75d-0d04-0410-961f-82ee72b054a4
2013-10-01  Jakub Jelinek  <jakub@redhat.com>
            Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

	PR target/58574
	* config/s390/s390.c (s390_split_branches): Modify check for table
	jump insns.
	(s390_chunkify_start): Rearrange table jump insn check in order to
	deal with compare and branch insns correctly.

2013-10-01  Jakub Jelinek  <jakub@redhat.com>

	PR target/58574
	* gcc.c-torture/execute/pr58574.c: New testcase.




git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203060 138bc75d-0d04-0410-961f-82ee72b054a4
	* tree-ssa-threadedge.c (thread_across_edge): Make path a pointer to
	a vec.  Only delete the path if we create one without successfully
	registering a jump thread.
	* tree-ssa-threadupdate.h (register_jump_thread): Pass in path vector
	as a pointer.
	* tree-ssa-threadupdate.c (threaded_edges): Remove.  No longer used
	(paths): New vector of jump threading paths.
	(THREAD_TARGET, THREAD_TARGET2): Remove accessor macros.
	(THREAD_PATH): New accessor macro for the entire thread path.
	(lookup_redirection_data): Get intermediate and final outgoing edge
	from the thread path.
	(create_edge_and_update_destination_phis): Copy the threading path.
	(ssa_fix_duplicate_block_edges): Get edges and block types from the
	jump threading path.
	(ssa_redirect_edges): Get edges and block types from the jump threading
	path.  Free the path vector.
	(thread_block): Get edges from the jump threading path.  Look at the
	entire path to see if we thread to a loop exit.  If we cancel a jump
	thread request, then free the path vector.
	(thread_single_edge): Get edges and block types from the jump threading
	path.  Free the path vector.
	(thread_through_loop_header): Get edges and block types from the jump
	threading path.  Free the path vector.
	(mark_threaded_blocks): Iterate over the vector of paths and store
	the path on the appropriate edge.  Get edges and block types from the
	jump threading path.
	(mark_threaded_blocks): Get edges and block types from the jump
	threading path.  Free the path vector.
	(thread_through_all_blocks): Use the vector of paths rather than
	a vector of 3-edge sets.
	(register_jump_thread): Accept pointer to a path vector rather
	than the path vector itself.  Store the path vector for later use.
	Simplify.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203061 138bc75d-0d04-0410-961f-82ee72b054a4