This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

HI to SI mode miss conversion on MIPS.



Hi,
I found the problem about HI to SI mode conversion on MIPS.

REPEATED BY
	gcc -O2 -g -df -dc hisi.c -o hisi
	./hisi

VERSION
	gcc version 2.95.2 19991024 (release) for MIPS
	gcc version 2.96 20000124 (experimental) for MIPS

The attached test program shows that gcc produces the incorrect 
object for swapping lower and upper byte. This test code derived 
from linux kernel linux/drivers/net/slhc.c.

The test swaps 0x0000235f twice, expceted results is 0x0000235f. But
you will get 0x005f235f on MIPSEB box. (This problem is occured even
if on MIPSEL box)

I tracked down in rough. In my observation, required "zero_extend"
or somthing was vanished on the "combination-phase".

Followings are interested portions of the test programe and
corresponding RTL codes. The problem is occured at the line 65 of
the C source code.

In the hisi.c.08.flow, RTLs look good. But #78, #86 and #99 in the
hisi.c.09.combine produce incorrect result.  
In my concern, The RTL corresspoindig to #95 in the hisi.c.08.flow,
	(set (reg:SI 111) (zero_extend:SI (reg:HI 111)))
must be put at the next of
#86 (set (subreg:SI (reg:HI 111) 0) (ior:SI (reg:SI 114) (reg:SI 117))) 
in the hisi.c.09.combine.

The attached patch is a workaround for this problem. Does anyone
have better solution or real fix ?  



=== Portion of C codes in hisi.c.
line 16:
__inline__ __const__ __u16 uswb16(__u16 x)
{
        return ((__u16)(
                  (((__u16)(  x  ) & (__u16)0x00ffU) << 8)
                | (((__u16)( x ) & (__u16)0xff00U) >> 8) ) )  ;
}
 :
 :
unsigned long result = 0 ;
 :
 :
line 65:
	result += swb16(swapped);

=== Portion of RTLs in hisi.08.flow. (produced by -df )

	Note:   Commtents begin with ";;".
		"Rxxx" denotes register xxx in comments.
		"#xx" denotes the insn number xx.

;; R108 <- (__u16) swapped
#67 (set (reg:HI 109) (mem/v/f:HI (symbol_ref:SI ("swapped")) 1))
#69 (set (reg:SI 108) (zero_extend:SI (reg:HI 109)))

;; R114 <- ( R108 & 0xff) << 8
#76 (set (reg:SI 112) (and:SI (reg:SI 108) (const_int 255 [0xff])))
#78 (set (reg:SI 114) (ashift:SI (reg:SI 112) (const_int 8 [0x8])))

;; R117 <- ((__u16)(R108 & 0xff00)) >> 8
#79 (set (reg:SI 115) (and:SI (reg:SI 108) (const_int 65280 [0xff00])))
#80 (set (reg:SI 116) (zero_extend:SI (subreg:HI (reg:SI 115) 0)))
#81 (set (reg:SI 117) (lshiftrt:SI (reg:SI 116) (const_int 8 [0x8])))

;; R121 <-  (__u16) (R114 | R117)
#84 (set (reg:SI 120) (ior:SI (reg:SI 114) (reg:SI 117)))
#85 (set (reg:SI 121) (zero_extend:SI (subreg:HI (reg:SI 120) 0))) 

;; R122 <- (__u16)R121
#86 (set (subreg:SI (reg:HI 111) 0) (reg:SI 121)) ;; paradoixcal subreg
#95 (set (reg:SI 122) (zero_extend:SI (reg:HI 111)))

;;  result <- R122+R107
#99 (set (reg:SI 124) (plus:SI (reg:SI 107) (reg:SI 122)))
#101 (set (mem/f:SI (symbol_ref:SI ("result")) 3) (reg:SI 124)) 


=== Portion of RTLs in hisi.09.combine. (produced buy -dc)

;; R108 <- (__u16) swapped
#67 (set (reg:HI 109) (mem/v/f:HI (symbol_ref:SI ("swapped")) 1))
#69 (set (reg:SI 108) (zero_extend:SI (reg:HI 109)))

;; R114 <- R108 << 8 ;; upper part of R114 is not cleard.
#76  NOTE_INSN_DELETED
#78 (set (reg:SI 114) (ashift:SI (reg:SI 108) (const_int 8 [0x8])))

;; R117 <- R108 >> 8
#79  NOTE_INSN_DELETED
#80  NOTE_INSN_DELETED
#81 (set (reg:SI 117) (lshiftrt:SI (reg:SI 108) (const_int 8 [0x8])))

#84  NOTE_INSN_DELETED
#85  NOTE_INSN_DELETED

;; R111 <- R117 | R114
#86 (set (subreg:SI (reg:HI 111) 0) (ior:SI (reg:SI 114) (reg:SI 117))) 

;; R122 <- R103 | R106
#95 (set (reg:SI 122) (ior:SI (reg:SI 103) (reg:SI 106)))

;; result <- R122 + R111
#99 (set (reg:SI 124) (plus:SI (reg:SI 122) (subreg:SI (reg:HI 111) 0)))
#101 (set (mem/f:SI (symbol_ref:SI ("result")) 3) (reg:SI 124))

=== 
---
Hiroyuki Machida
Creative Station		SCE Inc./Sony Corp.

--- combine.c.ORG	Tue Jan 25 05:10:01 2000
+++ combine.c	Thu Feb 10 19:59:01 2000
@@ -6640,6 +6640,9 @@ force_to_mode (x, mode, mask, reg, just_
       break;
 
     case SUBREG:
+#if 1
+	/* XXX: workaround for miss-conversion HI to SI mode on MIPS */
+#else
       if (subreg_lowpart_p (x)
 	  /* We can ignore the effect of this SUBREG if it narrows the mode or
 	     if the constant masks to zero all the bits the mode doesn't
@@ -6650,6 +6653,7 @@ force_to_mode (x, mode, mask, reg, just_
 			& GET_MODE_MASK (GET_MODE (x))
 			& ~ GET_MODE_MASK (GET_MODE (SUBREG_REG (x)))))))
 	return force_to_mode (SUBREG_REG (x), mode, mask, reg, next_select);
+#endif
       break;
 
     case AND:
/* 
 * hisi.c --- HI mode to SI mode coversion test for MIPS.
 *		ZERO_EXTEND is vanished on gcc 2.95 or later.
 *
 */

typedef int __s16  __attribute__((mode (HI)));
typedef int __s32  __attribute__((mode (SI)));

typedef unsigned int __u16  __attribute__((mode (HI)));
typedef unsigned int __u32  __attribute__((mode (SI)));


/* swap upper and lower byte */
__inline__ __const__ __u16 uswb16(__u16 x)
{
        return ((__u16)( 
		  (((__u16)(  x  ) & (__u16)0x00ffU) << 8) 
		| (((__u16)( x ) & (__u16)0xff00U) >> 8) ) )  ;
}


/* swap byte order like this; 0xaabbccdd -> 0xddccbbaa  */

__inline__ __const__ __u32 uswb32(__u32 x)
{
        return ((__u32)( 
	  (((__u32)(  x  ) & (__u32)0x000000ffUL) << 24) 
	| (((__u32)(  x  ) & (__u32)0x0000ff00UL) <<  8) 
	| (((__u32)(  x  ) & (__u32)0x00ff0000UL) >>  8) 
	| (((__u32)(  x  ) & (__u32)0xff000000UL) >> 24) ))  ;
}


#define swb32(x) ((__u32) uswb32(x))
#define swb16(x) ((__u32) uswb16(x))

/*
  Using the following singed verion, instead of the above 
  unsigned defintion, then you'll get a correct result.
#define swb16(x) ((__s32) uswb16(x))
 */


unsigned long result =0 ; /* eqaul to swb32(0) */
unsigned volatile short swapped;


#define INITAL_VAL 0x235f
volatile long expected=INITAL_VAL;


void
show_res()
{
	printf("\tresult  :0x%0.8x\tswaped  :0x%0.8x\n\texpected:0x%0.8x\n",
		result,swapped,expected);
}

int
main()
{
	swapped=swb16(INITAL_VAL); /* 'swapped' must be swapped INITAL_VAL */
	result = swb32(result);	   /* 'result'  must be zero */
	result += swb16(swapped);  /* 'result'  must tiwce swapped INITAL_VAL */
					/* but  ZERO_EXTEND will be vanished */

	printf("** TEST for HI -> SI mode conversion (zero_extend)\n");
	show_res();

	if ( result == expected ) {
		printf("OK\n");
	}
	else {
		printf("NG\n");
	}
	return (result != expected);
}

;; Function show_res

86 registers.

Register 81 used 2 times across 6 insns in block 0; set 1 time; pointer.

Register 82 used 2 times across 6 insns in block 0; set 1 time.

Register 83 used 2 times across 5 insns in block 0; set 1 time.

Register 84 used 2 times across 2 insns in block 0; set 1 time; 2 bytes.

Register 85 used 2 times across 5 insns in block 0; set 1 time.

1 basic blocks, 2 edges.

Basic block 0: first insn 32, last 26, loop_depth 0.
Predecessors:  ENTRY (fallthru)
Successors:  EXIT (fallthru)
Registers live at start: 1 28 29 30
Registers live at end: 1 28 29 30

(note 1 0 3 ("hisi.c") 55)

(note 3 1 5 "" NOTE_INSN_FUNCTION_BEG)

(note 5 3 6 ("hisi.c") 56)

(note 6 5 32 (nil) NOTE_INSN_BLOCK_BEG)

;; Start of basic block 0, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(note 32 6 9 [bb 0] NOTE_INSN_BASIC_BLOCK)

(insn 9 32 11 (set (reg:SI 81)
        (symbol_ref:SI ("*$LC0"))) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC0"))
        (nil)))

(insn 11 9 13 (set (reg:SI 82)
        (mem/f:SI (symbol_ref:SI ("result")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 13 11 15 (set (reg:HI 84)
        (mem/v/f:HI (symbol_ref:SI ("swapped")) 1)) 256 {movhi_internal2} (nil)
    (nil))

(insn 15 13 17 (set (reg:SI 83)
        (zero_extend:SI (reg:HI 84))) 174 {zero_extendhisi2+1} (insn_list 13 (nil))
    (expr_list:REG_DEAD (reg:HI 84)
        (nil)))

(insn 17 15 19 (set (reg:SI 85)
        (mem/v/f:SI (symbol_ref:SI ("expected")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 19 17 21 (set (reg:SI 4 a0)
        (reg:SI 81)) 236 {movsi_internal2} (insn_list 9 (nil))
    (expr_list:REG_DEAD (reg:SI 81)
        (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC0"))
            (nil))))

(insn 21 19 23 (set (reg:SI 5 a1)
        (reg:SI 82)) 236 {movsi_internal2} (insn_list 11 (nil))
    (expr_list:REG_DEAD (reg:SI 82)
        (nil)))

(insn 23 21 25 (set (reg:SI 6 a2)
        (reg:SI 83)) 236 {movsi_internal2} (insn_list 15 (nil))
    (expr_list:REG_DEAD (reg:SI 83)
        (nil)))

(insn 25 23 26 (set (reg:SI 7 a3)
        (reg:SI 85)) 236 {movsi_internal2} (insn_list 17 (nil))
    (expr_list:REG_DEAD (reg:SI 85)
        (nil)))

(call_insn 26 25 27 (parallel[ 
            (set (reg:SI 2 v0)
                (call (mem:SI (symbol_ref:SI ("printf")) 0)
                    (const_int 16 [0x10])))
            (clobber (reg:SI 31 ra))
        ] ) -1 (insn_list 19 (insn_list 21 (insn_list 23 (insn_list 25 (nil)))))
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_DEAD (reg:SI 5 a1)
            (expr_list:REG_DEAD (reg:SI 6 a2)
                (expr_list:REG_DEAD (reg:SI 7 a3)
                    (expr_list:REG_UNUSED (reg:SI 2 v0)
                        (expr_list:REG_UNUSED (reg:SI 31 ra)
                            (nil)))))))
    (expr_list (use (reg:SI 7 a3))
        (expr_list (use (reg:SI 6 a2))
            (expr_list (use (reg:SI 5 a1))
                (expr_list (use (reg:SI 4 a0))
                    (nil))))))
;; End of basic block 0

(note 27 26 28 ("hisi.c") 58)

(note 28 27 0 (nil) NOTE_INSN_BLOCK_END)


;; Function main

135 registers.

Register 82 used 2 times across 2 insns in block 0; set 1 time; 2 bytes.

Register 93 used 5 times across 12 insns in block 0; set 1 time; user var.

Register 95 used 2 times across 2 insns in block 0; set 1 time.

Register 96 used 2 times across 4 insns in block 0; set 1 time.

Register 97 used 2 times across 2 insns in block 0; set 1 time.

Register 98 used 2 times across 2 insns in block 0; set 1 time.

Register 99 used 2 times across 5 insns in block 0; set 1 time.

Register 100 used 2 times across 2 insns in block 0; set 1 time.

Register 101 used 2 times across 2 insns in block 0; set 1 time.

Register 102 used 2 times across 2 insns in block 0; set 1 time.

Register 103 used 2 times across 5 insns in block 0; set 1 time.

Register 104 used 2 times across 2 insns in block 0; set 1 time.

Register 105 used 2 times across 2 insns in block 0; set 1 time.

Register 106 used 2 times across 2 insns in block 0; set 1 time.

Register 107 used 2 times across 13 insns in block 0; set 1 time.

Register 108 used 3 times across 4 insns in block 0; set 1 time.

Register 109 used 2 times across 2 insns in block 0; set 1 time; 2 bytes.

Register 111 used 2 times across 2 insns in block 0; set 1 time; 2 bytes.

Register 112 used 2 times across 2 insns in block 0; set 1 time.

Register 114 used 2 times across 5 insns in block 0; set 1 time.

Register 115 used 2 times across 2 insns in block 0; set 1 time.

Register 116 used 2 times across 2 insns in block 0; set 1 time.

Register 117 used 2 times across 2 insns in block 0; set 1 time.

Register 120 used 2 times across 2 insns in block 0; set 1 time.

Register 121 used 2 times across 2 insns in block 0; set 1 time.

Register 122 used 2 times across 2 insns in block 0; set 1 time.

Register 124 used 2 times across 2 insns in block 0; set 1 time.

Register 125 used 2 times across 2 insns in block 0; set 1 time; pointer.

Register 126 used 2 times across 3 insns in block 0; set 1 time.

Register 127 used 2 times across 2 insns in block 0; set 1 time.

Register 128 used 2 times across 2 insns in block 1; set 1 time; pointer.

Register 129 used 2 times across 2 insns in block 2; set 1 time; pointer.

Register 131 used 2 times across 3 insns in block 3; set 1 time.

Register 132 used 2 times across 2 insns in block 3; set 1 time.

Register 133 used 2 times across 2 insns in block 3; set 1 time.

Register 134 used 2 times across 2 insns in block 3; set 1 time.

4 basic blocks, 6 edges.

Basic block 0: first insn 164, last 115, loop_depth 0.
Predecessors:  ENTRY (fallthru)
Successors:  1 (fallthru) 2
Registers live at start: 1 28 29 30
Registers live at end: 1 28 29 30

Basic block 1: first insn 158, last 125, loop_depth 0.
Predecessors:  0 (fallthru)
Successors:  3
Registers live at start: 1 28 29 30
Registers live at end: 1 28 29 30

Basic block 2: first insn 127, last 159, loop_depth 0.
Predecessors:  0
Successors:  3 (fallthru)
Registers live at start: 1 28 29 30
Registers live at end: 1 28 29 30

Basic block 3: first insn 137, last 148, loop_depth 0.
Predecessors:  2 (fallthru) 1
Successors:  EXIT (fallthru)
Registers live at start: 1 28 29 30
Registers live at end: 1 2 28 29 30

(note 1 0 3 ("hisi.c") 62)

(note 3 1 164 "" NOTE_INSN_FUNCTION_BEG)

;; Start of basic block 0, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(note 164 3 5 [bb 0] NOTE_INSN_BASIC_BLOCK)

(call_insn 5 164 6 (parallel[ 
            (call (mem:SI (symbol_ref:SI ("__main")) 0)
                (const_int 16 [0x10]))
            (clobber (reg:SI 31 ra))
        ] ) -1 (nil)
    (expr_list:REG_UNUSED (reg:SI 31 ra)
        (nil))
    (nil))

(note 6 5 7 ("hisi.c") 63)

(note 7 6 9 (nil) NOTE_INSN_BLOCK_BEG)

(note/i 9 7 12 ("hisi.c") 16)

(note 12 9 14 0x2abe1360 NOTE_INSN_BLOCK_BEG)

(note/i 14 12 25 ("hisi.c") 17)

(insn/i 25 14 28 (set (subreg:SI (reg:HI 82) 0)
        (const_int 24355 [0x5f23])) 236 {movsi_internal2} (nil)
    (nil))

(note/i 28 25 31 ("hisi.c") 20)

(note 31 28 32 0x2abe1360 NOTE_INSN_BLOCK_END)

(note 32 31 34 ("hisi.c") 63)

(insn 34 32 35 (set (mem/v/f:HI (symbol_ref:SI ("swapped")) 1)
        (reg:HI 82)) 256 {movhi_internal2} (insn_list 25 (nil))
    (expr_list:REG_DEAD (reg:HI 82)
        (nil)))

(note 35 34 36 ("hisi.c") 64)

(note/i 36 35 38 ("hisi.c") 26)

(insn 38 36 39 (set (reg/v:SI 93)
        (mem/f:SI (symbol_ref:SI ("result")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(note 39 38 41 0x2abe1820 NOTE_INSN_BLOCK_BEG)

(note/i 41 39 42 ("hisi.c") 27)

(insn/i 42 41 43 (set (reg:SI 95)
        (and:SI (reg/v:SI 93)
            (const_int 255 [0xff]))) 135 {andsi3+1} (insn_list 38 (nil))
    (nil))

(insn/i 43 42 44 (set (reg:SI 96)
        (ashift:SI (reg:SI 95)
            (const_int 24 [0x18]))) 283 {ashlsi3_internal1} (insn_list 42 (nil))
    (expr_list:REG_DEAD (reg:SI 95)
        (nil)))

(insn/i 44 43 45 (set (reg:SI 97)
        (and:SI (reg/v:SI 93)
            (const_int 65280 [0xff00]))) 135 {andsi3+1} (nil)
    (nil))

(insn/i 45 44 46 (set (reg:SI 98)
        (ashift:SI (reg:SI 97)
            (const_int 8 [0x8]))) 283 {ashlsi3_internal1} (insn_list 44 (nil))
    (expr_list:REG_DEAD (reg:SI 97)
        (nil)))

(insn/i 46 45 47 (set (reg:SI 99)
        (ior:SI (reg:SI 96)
            (reg:SI 98))) 143 {iorsi3+1} (insn_list 43 (insn_list 45 (nil)))
    (expr_list:REG_DEAD (reg:SI 96)
        (expr_list:REG_DEAD (reg:SI 98)
            (nil))))

(insn/i 47 46 48 (set (reg:SI 100)
        (const_int 16711680 [0xff0000])) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (const_int 16711680 [0xff0000])
        (nil)))

(insn/i 48 47 49 (set (reg:SI 101)
        (and:SI (reg/v:SI 93)
            (reg:SI 100))) 135 {andsi3+1} (insn_list 47 (nil))
    (expr_list:REG_DEAD (reg:SI 100)
        (nil)))

(insn/i 49 48 50 (set (reg:SI 102)
        (lshiftrt:SI (reg:SI 101)
            (const_int 8 [0x8]))) 313 {lshrsi3_internal1} (insn_list 48 (nil))
    (expr_list:REG_DEAD (reg:SI 101)
        (nil)))

(insn/i 50 49 51 (set (reg:SI 103)
        (ior:SI (reg:SI 99)
            (reg:SI 102))) 143 {iorsi3+1} (insn_list 46 (insn_list 49 (nil)))
    (expr_list:REG_DEAD (reg:SI 99)
        (expr_list:REG_DEAD (reg:SI 102)
            (nil))))

(insn/i 51 50 52 (set (reg:SI 104)
        (const_int -16777216 [0xff000000])) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (const_int -16777216 [0xff000000])
        (nil)))

(insn/i 52 51 53 (set (reg:SI 105)
        (and:SI (reg/v:SI 93)
            (reg:SI 104))) 135 {andsi3+1} (insn_list 51 (nil))
    (expr_list:REG_DEAD (reg/v:SI 93)
        (expr_list:REG_DEAD (reg:SI 104)
            (nil))))

(insn/i 53 52 54 (set (reg:SI 106)
        (lshiftrt:SI (reg:SI 105)
            (const_int 24 [0x18]))) 313 {lshrsi3_internal1} (insn_list 52 (nil))
    (expr_list:REG_DEAD (reg:SI 105)
        (nil)))

(insn/i 54 53 58 (set (reg:SI 107)
        (ior:SI (reg:SI 103)
            (reg:SI 106))) 143 {iorsi3+1} (insn_list 50 (insn_list 53 (nil)))
    (expr_list:REG_DEAD (reg:SI 103)
        (expr_list:REG_DEAD (reg:SI 106)
            (nil))))

(note/i 58 54 61 ("hisi.c") 32)

(note 61 58 62 0x2abe1820 NOTE_INSN_BLOCK_END)

(note 62 61 64 ("hisi.c") 64)

(note 64 62 65 "" NOTE_INSN_DELETED)

(note 65 64 67 ("hisi.c") 65)

(insn 67 65 69 (set (reg:HI 109)
        (mem/v/f:HI (symbol_ref:SI ("swapped")) 1)) 256 {movhi_internal2} (nil)
    (nil))

(insn 69 67 70 (set (reg:SI 108)
        (zero_extend:SI (reg:HI 109))) 174 {zero_extendhisi2+1} (insn_list 67 (nil))
    (expr_list:REG_DEAD (reg:HI 109)
        (nil)))

(note/i 70 69 73 ("hisi.c") 16)

(note 73 70 75 0x2abe1e00 NOTE_INSN_BLOCK_BEG)

(note/i 75 73 76 ("hisi.c") 17)

(insn/i 76 75 78 (set (reg:SI 112)
        (and:SI (reg:SI 108)
            (const_int 255 [0xff]))) 135 {andsi3+1} (insn_list 69 (nil))
    (nil))

(insn/i 78 76 79 (set (reg:SI 114)
        (ashift:SI (reg:SI 112)
            (const_int 8 [0x8]))) 283 {ashlsi3_internal1} (insn_list 76 (nil))
    (expr_list:REG_DEAD (reg:SI 112)
        (nil)))

(insn/i 79 78 80 (set (reg:SI 115)
        (and:SI (reg:SI 108)
            (const_int 65280 [0xff00]))) 135 {andsi3+1} (nil)
    (expr_list:REG_DEAD (reg:SI 108)
        (nil)))

(insn/i 80 79 81 (set (reg:SI 116)
        (zero_extend:SI (subreg:HI (reg:SI 115) 0))) 174 {zero_extendhisi2+1} (insn_list 79 (nil))
    (expr_list:REG_DEAD (reg:SI 115)
        (nil)))

(insn/i 81 80 84 (set (reg:SI 117)
        (lshiftrt:SI (reg:SI 116)
            (const_int 8 [0x8]))) 313 {lshrsi3_internal1} (insn_list 80 (nil))
    (expr_list:REG_DEAD (reg:SI 116)
        (nil)))

(insn/i 84 81 85 (set (reg:SI 120)
        (ior:SI (reg:SI 114)
            (reg:SI 117))) 143 {iorsi3+1} (insn_list 78 (insn_list 81 (nil)))
    (expr_list:REG_DEAD (reg:SI 114)
        (expr_list:REG_DEAD (reg:SI 117)
            (nil))))

(insn/i 85 84 86 (set (reg:SI 121)
        (zero_extend:SI (subreg:HI (reg:SI 120) 0))) 174 {zero_extendhisi2+1} (insn_list 84 (nil))
    (expr_list:REG_DEAD (reg:SI 120)
        (nil)))

(insn/i 86 85 89 (set (subreg:SI (reg:HI 111) 0)
        (reg:SI 121)) 236 {movsi_internal2} (insn_list 85 (nil))
    (expr_list:REG_DEAD (reg:SI 121)
        (nil)))

(note/i 89 86 92 ("hisi.c") 20)

(note 92 89 93 0x2abe1e00 NOTE_INSN_BLOCK_END)

(note 93 92 95 ("hisi.c") 65)

(insn 95 93 99 (set (reg:SI 122)
        (zero_extend:SI (reg:HI 111))) 174 {zero_extendhisi2+1} (insn_list 86 (nil))
    (expr_list:REG_DEAD (reg:HI 111)
        (nil)))

(insn 99 95 101 (set (reg:SI 124)
        (plus:SI (reg:SI 107)
            (reg:SI 122))) 3 {addsi3_internal} (insn_list 54 (insn_list 95 (nil)))
    (expr_list:REG_DEAD (reg:SI 107)
        (expr_list:REG_DEAD (reg:SI 122)
            (nil))))

(insn 101 99 102 (set (mem/f:SI (symbol_ref:SI ("result")) 3)
        (reg:SI 124)) 236 {movsi_internal2} (insn_list 99 (nil))
    (expr_list:REG_DEAD (reg:SI 124)
        (nil)))

(note 102 101 104 ("hisi.c") 68)

(insn 104 102 106 (set (reg:SI 125)
        (symbol_ref:SI ("*$LC1"))) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC1"))
        (nil)))

(insn 106 104 107 (set (reg:SI 4 a0)
        (reg:SI 125)) 236 {movsi_internal2} (insn_list 104 (nil))
    (expr_list:REG_DEAD (reg:SI 125)
        (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC1"))
            (nil))))

(call_insn 107 106 108 (parallel[ 
            (set (reg:SI 2 v0)
                (call (mem:SI (symbol_ref:SI ("printf")) 0)
                    (const_int 16 [0x10])))
            (clobber (reg:SI 31 ra))
        ] ) -1 (insn_list 106 (nil))
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_UNUSED (reg:SI 2 v0)
            (expr_list:REG_UNUSED (reg:SI 31 ra)
                (nil))))
    (expr_list (use (reg:SI 4 a0))
        (nil)))

(note 108 107 109 ("hisi.c") 69)

(call_insn 109 108 110 (parallel[ 
            (call (mem:SI (symbol_ref:SI ("show_res")) 0)
                (const_int 16 [0x10]))
            (clobber (reg:SI 31 ra))
        ] ) -1 (nil)
    (expr_list:REG_UNUSED (reg:SI 31 ra)
        (nil))
    (nil))

(note 110 109 112 ("hisi.c") 71)

(insn 112 110 114 (set (reg:SI 126)
        (mem/f:SI (symbol_ref:SI ("result")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 114 112 115 (set (reg:SI 127)
        (mem/v/f:SI (symbol_ref:SI ("expected")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(jump_insn 115 114 116 (set (pc)
        (if_then_else (ne:SI (reg:SI 126)
                (reg:SI 127))
            (label_ref 127)
            (pc))) 341 {branch_equality} (insn_list 112 (insn_list 114 (nil)))
    (expr_list:REG_DEAD (reg:SI 126)
        (expr_list:REG_DEAD (reg:SI 127)
            (nil))))
;; End of basic block 0

(note 116 115 158 ("hisi.c") 72)

;; Start of basic block 1, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(note 158 116 120 [bb 1] NOTE_INSN_BASIC_BLOCK)

(insn 120 158 122 (set (reg:SI 128)
        (symbol_ref:SI ("*$LC2"))) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC2"))
        (nil)))

(insn 122 120 123 (set (reg:SI 4 a0)
        (reg:SI 128)) 236 {movsi_internal2} (insn_list 120 (nil))
    (expr_list:REG_DEAD (reg:SI 128)
        (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC2"))
            (nil))))

(call_insn 123 122 124 (parallel[ 
            (set (reg:SI 2 v0)
                (call (mem:SI (symbol_ref:SI ("printf")) 0)
                    (const_int 16 [0x10])))
            (clobber (reg:SI 31 ra))
        ] ) -1 (insn_list 122 (nil))
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_UNUSED (reg:SI 2 v0)
            (expr_list:REG_UNUSED (reg:SI 31 ra)
                (nil))))
    (expr_list (use (reg:SI 4 a0))
        (nil)))

(note 124 123 125 ("hisi.c") 73)

(jump_insn 125 124 126 (set (pc)
        (label_ref 137)) -1 (nil)
    (nil))
;; End of basic block 1

(barrier 126 125 127)

;; Start of basic block 2, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(code_label 127 126 160 9 "" "" [num uses: 1])

(note 160 127 128 [bb 2] NOTE_INSN_BASIC_BLOCK)

(note 128 160 132 ("hisi.c") 75)

(insn 132 128 134 (set (reg:SI 129)
        (symbol_ref:SI ("*$LC3"))) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC3"))
        (nil)))

(insn 134 132 135 (set (reg:SI 4 a0)
        (reg:SI 129)) 236 {movsi_internal2} (insn_list 132 (nil))
    (expr_list:REG_DEAD (reg:SI 129)
        (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC3"))
            (nil))))

(call_insn 135 134 159 (parallel[ 
            (set (reg:SI 2 v0)
                (call (mem:SI (symbol_ref:SI ("printf")) 0)
                    (const_int 16 [0x10])))
            (clobber (reg:SI 31 ra))
        ] ) -1 (insn_list 134 (nil))
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_UNUSED (reg:SI 2 v0)
            (expr_list:REG_UNUSED (reg:SI 31 ra)
                (nil))))
    (expr_list (use (reg:SI 4 a0))
        (nil)))

(insn 159 135 136 (use (const_int 0 [0x0])) -1 (nil)
    (nil))
;; End of basic block 2

(note 136 159 137 ("hisi.c") 76)

;; Start of basic block 3, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(code_label 137 136 161 10 "" "" [num uses: 1])

(note 161 137 138 [bb 3] NOTE_INSN_BASIC_BLOCK)

(note 138 161 140 ("hisi.c") 77)

(insn 140 138 142 (set (reg:SI 131)
        (mem/f:SI (symbol_ref:SI ("result")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 142 140 144 (set (reg:SI 132)
        (mem/v/f:SI (symbol_ref:SI ("expected")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 144 142 146 (set (reg:SI 134)
        (xor:SI (reg:SI 131)
            (reg:SI 132))) 150 {xorsi3+1} (insn_list 140 (insn_list 142 (nil)))
    (expr_list:REG_DEAD (reg:SI 131)
        (expr_list:REG_DEAD (reg:SI 132)
            (nil))))

(insn 146 144 148 (set (reg:SI 133)
        (gtu:SI (reg:SI 134)
            (const_int 0 [0x0]))) 398 {sgtu_si} (insn_list 144 (nil))
    (expr_list:REG_DEAD (reg:SI 134)
        (nil)))

(insn 148 146 151 (set (reg/i:SI 2 v0)
        (reg:SI 133)) 236 {movsi_internal2} (insn_list 146 (nil))
    (expr_list:REG_DEAD (reg:SI 133)
        (nil)))
;; End of basic block 3

(note 151 148 152 ("hisi.c") 78)

(note 152 151 0 (nil) NOTE_INSN_BLOCK_END)


;; Function uswb16

94 registers.

Register 82 used 2 times across 2 insns in block 0; set 1 time.

Register 83 used 3 times across 4 insns in block 0; set 1 time.

Register 84 used 2 times across 2 insns in block 0; set 1 time.

Register 85 used 2 times across 2 insns in block 0; set 1 time.

Register 87 used 2 times across 5 insns in block 0; set 1 time.

Register 88 used 2 times across 2 insns in block 0; set 1 time.

Register 89 used 2 times across 2 insns in block 0; set 1 time.

Register 90 used 2 times across 2 insns in block 0; set 1 time.

Register 93 used 2 times across 2 insns in block 0; set 1 time.

1 basic blocks, 2 edges.

Basic block 0: first insn 43, last 35, loop_depth 0.
Predecessors:  ENTRY (fallthru)
Successors:  EXIT (fallthru)
Registers live at start: 1 4 28 29 30
Registers live at end: 1 2 28 29 30

(note 1 0 43 ("hisi.c") 16)

;; Start of basic block 0, registers live: 1 [$1] 4 [$4] 28 [$28] 29 [$sp] 30 [$fp]
(note 43 1 4 [bb 0] NOTE_INSN_BASIC_BLOCK)

(insn 4 43 6 (set (reg:SI 82)
        (reg:SI 4 a0)) 236 {movsi_internal2} (nil)
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (nil)))

(insn 6 4 9 (set (reg:SI 83)
        (zero_extend:SI (subreg:HI (reg:SI 82) 0))) 174 {zero_extendhisi2+1} (insn_list 4 (nil))
    (expr_list:REG_DEAD (reg:SI 82)
        (nil)))

(note 9 6 11 "" NOTE_INSN_FUNCTION_BEG)

(note 11 9 15 ("hisi.c") 17)

(insn 15 11 19 (set (reg:SI 85)
        (and:SI (reg:SI 83)
            (const_int 255 [0xff]))) 135 {andsi3+1} (insn_list 6 (nil))
    (nil))

(insn 19 15 21 (set (reg:SI 87)
        (ashift:SI (reg:SI 85)
            (const_int 8 [0x8]))) 283 {ashlsi3_internal1} (insn_list 15 (nil))
    (expr_list:REG_DEAD (reg:SI 85)
        (nil)))

(insn 21 19 23 (set (reg:SI 88)
        (and:SI (reg:SI 83)
            (const_int 65280 [0xff00]))) 135 {andsi3+1} (nil)
    (expr_list:REG_DEAD (reg:SI 83)
        (nil)))

(insn 23 21 25 (set (reg:SI 89)
        (zero_extend:SI (subreg:HI (reg:SI 88) 0))) 174 {zero_extendhisi2+1} (insn_list 21 (nil))
    (expr_list:REG_DEAD (reg:SI 88)
        (nil)))

(insn 25 23 31 (set (reg:SI 90)
        (lshiftrt:SI (reg:SI 89)
            (const_int 8 [0x8]))) 313 {lshrsi3_internal1} (insn_list 23 (nil))
    (expr_list:REG_DEAD (reg:SI 89)
        (nil)))

(insn 31 25 33 (set (reg:SI 93)
        (ior:SI (reg:SI 87)
            (reg:SI 90))) 143 {iorsi3+1} (insn_list 19 (insn_list 25 (nil)))
    (expr_list:REG_DEAD (reg:SI 87)
        (expr_list:REG_DEAD (reg:SI 90)
            (nil))))

(insn 33 31 35 (set (reg:SI 84)
        (zero_extend:SI (subreg:HI (reg:SI 93) 0))) 174 {zero_extendhisi2+1} (insn_list 31 (nil))
    (expr_list:REG_DEAD (reg:SI 93)
        (nil)))

(insn 35 33 38 (set (reg/i:SI 2 v0)
        (reg:SI 84)) 236 {movsi_internal2} (insn_list 33 (nil))
    (expr_list:REG_DEAD (reg:SI 84)
        (nil)))
;; End of basic block 0

(note 38 35 0 ("hisi.c") 20)


;; Function uswb32

95 registers.

Register 81 used 5 times across 12 insns in block 0; set 1 time; user var.

Register 82 used 2 times across 2 insns in block 0; set 1 time.

Register 83 used 2 times across 2 insns in block 0; set 1 time.

Register 84 used 2 times across 4 insns in block 0; set 1 time.

Register 85 used 2 times across 2 insns in block 0; set 1 time.

Register 86 used 2 times across 2 insns in block 0; set 1 time.

Register 87 used 2 times across 5 insns in block 0; set 1 time.

Register 88 used 2 times across 2 insns in block 0; set 1 time.

Register 89 used 2 times across 2 insns in block 0; set 1 time.

Register 90 used 2 times across 2 insns in block 0; set 1 time.

Register 91 used 2 times across 5 insns in block 0; set 1 time.

Register 92 used 2 times across 2 insns in block 0; set 1 time.

Register 93 used 2 times across 2 insns in block 0; set 1 time.

Register 94 used 2 times across 2 insns in block 0; set 1 time.

1 basic blocks, 2 edges.

Basic block 0: first insn 45, last 37, loop_depth 0.
Predecessors:  ENTRY (fallthru)
Successors:  EXIT (fallthru)
Registers live at start: 1 4 28 29 30
Registers live at end: 1 2 28 29 30

(note 1 0 45 ("hisi.c") 26)

;; Start of basic block 0, registers live: 1 [$1] 4 [$4] 28 [$28] 29 [$sp] 30 [$fp]
(note 45 1 4 [bb 0] NOTE_INSN_BASIC_BLOCK)

(insn 4 45 5 (set (reg/v:SI 81)
        (reg:SI 4 a0)) 236 {movsi_internal2} (nil)
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_EQUIV (mem/f:SI (reg:SI 0 $0) 2)
            (nil))))

(note 5 4 7 "" NOTE_INSN_FUNCTION_BEG)

(note 7 5 11 ("hisi.c") 27)

(insn 11 7 13 (set (reg:SI 83)
        (and:SI (reg/v:SI 81)
            (const_int 255 [0xff]))) 135 {andsi3+1} (insn_list 4 (nil))
    (nil))

(insn 13 11 15 (set (reg:SI 84)
        (ashift:SI (reg:SI 83)
            (const_int 24 [0x18]))) 283 {ashlsi3_internal1} (insn_list 11 (nil))
    (expr_list:REG_DEAD (reg:SI 83)
        (nil)))

(insn 15 13 17 (set (reg:SI 85)
        (and:SI (reg/v:SI 81)
            (const_int 65280 [0xff00]))) 135 {andsi3+1} (nil)
    (nil))

(insn 17 15 19 (set (reg:SI 86)
        (ashift:SI (reg:SI 85)
            (const_int 8 [0x8]))) 283 {ashlsi3_internal1} (insn_list 15 (nil))
    (expr_list:REG_DEAD (reg:SI 85)
        (nil)))

(insn 19 17 21 (set (reg:SI 87)
        (ior:SI (reg:SI 84)
            (reg:SI 86))) 143 {iorsi3+1} (insn_list 13 (insn_list 17 (nil)))
    (expr_list:REG_DEAD (reg:SI 84)
        (expr_list:REG_DEAD (reg:SI 86)
            (nil))))

(insn 21 19 23 (set (reg:SI 89)
        (const_int 16711680 [0xff0000])) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (const_int 16711680 [0xff0000])
        (nil)))

(insn 23 21 25 (set (reg:SI 88)
        (and:SI (reg/v:SI 81)
            (reg:SI 89))) 135 {andsi3+1} (insn_list 21 (nil))
    (expr_list:REG_DEAD (reg:SI 89)
        (nil)))

(insn 25 23 27 (set (reg:SI 90)
        (lshiftrt:SI (reg:SI 88)
            (const_int 8 [0x8]))) 313 {lshrsi3_internal1} (insn_list 23 (nil))
    (expr_list:REG_DEAD (reg:SI 88)
        (nil)))

(insn 27 25 29 (set (reg:SI 91)
        (ior:SI (reg:SI 87)
            (reg:SI 90))) 143 {iorsi3+1} (insn_list 19 (insn_list 25 (nil)))
    (expr_list:REG_DEAD (reg:SI 87)
        (expr_list:REG_DEAD (reg:SI 90)
            (nil))))

(insn 29 27 31 (set (reg:SI 93)
        (const_int -16777216 [0xff000000])) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (const_int -16777216 [0xff000000])
        (nil)))

(insn 31 29 33 (set (reg:SI 92)
        (and:SI (reg/v:SI 81)
            (reg:SI 93))) 135 {andsi3+1} (insn_list 29 (nil))
    (expr_list:REG_DEAD (reg/v:SI 81)
        (expr_list:REG_DEAD (reg:SI 93)
            (nil))))

(insn 33 31 35 (set (reg:SI 94)
        (lshiftrt:SI (reg:SI 92)
            (const_int 24 [0x18]))) 313 {lshrsi3_internal1} (insn_list 31 (nil))
    (expr_list:REG_DEAD (reg:SI 92)
        (nil)))

(insn 35 33 37 (set (reg:SI 82)
        (ior:SI (reg:SI 91)
            (reg:SI 94))) 143 {iorsi3+1} (insn_list 27 (insn_list 33 (nil)))
    (expr_list:REG_DEAD (reg:SI 91)
        (expr_list:REG_DEAD (reg:SI 94)
            (nil))))

(insn 37 35 40 (set (reg/i:SI 2 v0)
        (reg:SI 82)) 236 {movsi_internal2} (insn_list 35 (nil))
    (expr_list:REG_DEAD (reg:SI 82)
        (nil)))
;; End of basic block 0

(note 40 37 0 ("hisi.c") 32)


;; Function show_res

(note 1 0 3 ("hisi.c") 55)

(note 3 1 5 "" NOTE_INSN_FUNCTION_BEG)

(note 5 3 6 ("hisi.c") 56)

(note 6 5 32 (nil) NOTE_INSN_BLOCK_BEG)

;; Start of basic block 0, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(note 32 6 9 [bb 0] NOTE_INSN_BASIC_BLOCK)

(note 9 32 11 "" NOTE_INSN_DELETED)

(note 11 9 13 "" NOTE_INSN_DELETED)

(insn 13 11 15 (set (reg:HI 84)
        (mem/v/f:HI (symbol_ref:SI ("swapped")) 1)) 256 {movhi_internal2} (nil)
    (nil))

(note 15 13 17 "" NOTE_INSN_DELETED)

(insn 17 15 19 (set (reg:SI 85)
        (mem/v/f:SI (symbol_ref:SI ("expected")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 19 17 21 (set (reg:SI 4 a0)
        (symbol_ref:SI ("*$LC0"))) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC0"))
        (nil)))

(insn 21 19 23 (set (reg:SI 5 a1)
        (mem/f:SI (symbol_ref:SI ("result")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 23 21 25 (set (reg:SI 6 a2)
        (subreg:SI (reg:HI 84) 0)) 236 {movsi_internal2} (insn_list 13 (nil))
    (expr_list:REG_DEAD (reg:HI 84)
        (nil)))

(insn 25 23 26 (set (reg:SI 7 a3)
        (reg:SI 85)) 236 {movsi_internal2} (insn_list 17 (nil))
    (expr_list:REG_DEAD (reg:SI 85)
        (nil)))

(call_insn 26 25 27 (parallel[ 
            (set (reg:SI 2 v0)
                (call (mem:SI (symbol_ref:SI ("printf")) 0)
                    (const_int 16 [0x10])))
            (clobber (reg:SI 31 ra))
        ] ) -1 (insn_list 19 (insn_list 21 (insn_list 23 (insn_list 25 (nil)))))
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_DEAD (reg:SI 5 a1)
            (expr_list:REG_DEAD (reg:SI 6 a2)
                (expr_list:REG_DEAD (reg:SI 7 a3)
                    (expr_list:REG_UNUSED (reg:SI 2 v0)
                        (expr_list:REG_UNUSED (reg:SI 31 ra)
                            (nil)))))))
    (expr_list (use (reg:SI 7 a3))
        (expr_list (use (reg:SI 6 a2))
            (expr_list (use (reg:SI 5 a1))
                (expr_list (use (reg:SI 4 a0))
                    (nil))))))
;; End of basic block 0

(note 27 26 28 ("hisi.c") 58)

(note 28 27 0 (nil) NOTE_INSN_BLOCK_END)


;; Function main

(note 1 0 3 ("hisi.c") 62)

(note 3 1 164 "" NOTE_INSN_FUNCTION_BEG)

;; Start of basic block 0, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(note 164 3 5 [bb 0] NOTE_INSN_BASIC_BLOCK)

(call_insn 5 164 6 (parallel[ 
            (call (mem:SI (symbol_ref:SI ("__main")) 0)
                (const_int 16 [0x10]))
            (clobber (reg:SI 31 ra))
        ] ) -1 (nil)
    (expr_list:REG_UNUSED (reg:SI 31 ra)
        (nil))
    (nil))

(note 6 5 7 ("hisi.c") 63)

(note 7 6 9 (nil) NOTE_INSN_BLOCK_BEG)

(note/i 9 7 12 ("hisi.c") 16)

(note 12 9 14 0x2abe1360 NOTE_INSN_BLOCK_BEG)

(note/i 14 12 25 ("hisi.c") 17)

(insn/i 25 14 28 (set (subreg:SI (reg:HI 82) 0)
        (const_int 24355 [0x5f23])) 236 {movsi_internal2} (nil)
    (nil))

(note/i 28 25 31 ("hisi.c") 20)

(note 31 28 32 0x2abe1360 NOTE_INSN_BLOCK_END)

(note 32 31 34 ("hisi.c") 63)

(insn 34 32 35 (set (mem/v/f:HI (symbol_ref:SI ("swapped")) 1)
        (reg:HI 82)) 256 {movhi_internal2} (insn_list 25 (nil))
    (expr_list:REG_DEAD (reg:HI 82)
        (nil)))

(note 35 34 36 ("hisi.c") 64)

(note/i 36 35 38 ("hisi.c") 26)

(insn 38 36 39 (set (reg/v:SI 93)
        (mem/f:SI (symbol_ref:SI ("result")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(note 39 38 41 0x2abe1820 NOTE_INSN_BLOCK_BEG)

(note/i 41 39 42 ("hisi.c") 27)

(note/i 42 41 43 "" NOTE_INSN_DELETED)

(insn/i 43 42 44 (set (reg:SI 96)
        (ashift:SI (reg/v:SI 93)
            (const_int 24 [0x18]))) 283 {ashlsi3_internal1} (insn_list 38 (nil))
    (nil))

(insn/i 44 43 45 (set (reg:SI 97)
        (and:SI (reg/v:SI 93)
            (const_int 65280 [0xff00]))) 135 {andsi3+1} (nil)
    (nil))

(insn/i 45 44 46 (set (reg:SI 98)
        (ashift:SI (reg:SI 97)
            (const_int 8 [0x8]))) 283 {ashlsi3_internal1} (insn_list 44 (nil))
    (expr_list:REG_DEAD (reg:SI 97)
        (nil)))

(insn/i 46 45 47 (set (reg:SI 99)
        (ior:SI (reg:SI 96)
            (reg:SI 98))) 143 {iorsi3+1} (insn_list 43 (insn_list 45 (nil)))
    (expr_list:REG_DEAD (reg:SI 96)
        (expr_list:REG_DEAD (reg:SI 98)
            (nil))))

(note/i 47 46 48 "" NOTE_INSN_DELETED)

(insn/i 48 47 49 (set (reg:SI 101)
        (lshiftrt:SI (reg/v:SI 93)
            (const_int 8 [0x8]))) 313 {lshrsi3_internal1} (nil)
    (nil))

(insn/i 49 48 50 (set (reg:SI 102)
        (and:SI (reg:SI 101)
            (const_int 65280 [0xff00]))) 135 {andsi3+1} (insn_list 48 (nil))
    (expr_list:REG_DEAD (reg:SI 101)
        (nil)))

(insn/i 50 49 51 (set (reg:SI 103)
        (ior:SI (reg:SI 99)
            (reg:SI 102))) 143 {iorsi3+1} (insn_list 46 (insn_list 49 (nil)))
    (expr_list:REG_DEAD (reg:SI 99)
        (expr_list:REG_DEAD (reg:SI 102)
            (nil))))

(note/i 51 50 52 "" NOTE_INSN_DELETED)

(note/i 52 51 53 "" NOTE_INSN_DELETED)

(insn/i 53 52 54 (set (reg:SI 106)
        (lshiftrt:SI (reg/v:SI 93)
            (const_int 24 [0x18]))) 313 {lshrsi3_internal1} (nil)
    (expr_list:REG_DEAD (reg/v:SI 93)
        (nil)))

(note/i 54 53 58 "" NOTE_INSN_DELETED)

(note/i 58 54 61 ("hisi.c") 32)

(note 61 58 62 0x2abe1820 NOTE_INSN_BLOCK_END)

(note 62 61 64 ("hisi.c") 64)

(note 64 62 65 "" NOTE_INSN_DELETED)

(note 65 64 67 ("hisi.c") 65)

(insn 67 65 69 (set (reg:HI 109)
        (mem/v/f:HI (symbol_ref:SI ("swapped")) 1)) 256 {movhi_internal2} (nil)
    (nil))

(insn 69 67 70 (set (reg:SI 108)
        (zero_extend:SI (reg:HI 109))) 174 {zero_extendhisi2+1} (insn_list 67 (nil))
    (expr_list:REG_DEAD (reg:HI 109)
        (nil)))

(note/i 70 69 73 ("hisi.c") 16)

(note 73 70 75 0x2abe1e00 NOTE_INSN_BLOCK_BEG)

(note/i 75 73 76 ("hisi.c") 17)

(note/i 76 75 78 "" NOTE_INSN_DELETED)

(insn/i 78 76 79 (set (reg:SI 114)
        (ashift:SI (reg:SI 108)
            (const_int 8 [0x8]))) 283 {ashlsi3_internal1} (insn_list 69 (nil))
    (nil))

(note/i 79 78 80 "" NOTE_INSN_DELETED)

(note/i 80 79 81 "" NOTE_INSN_DELETED)

(insn/i 81 80 84 (set (reg:SI 117)
        (lshiftrt:SI (reg:SI 108)
            (const_int 8 [0x8]))) 313 {lshrsi3_internal1} (nil)
    (expr_list:REG_DEAD (reg:SI 108)
        (nil)))

(note/i 84 81 85 "" NOTE_INSN_DELETED)

(note/i 85 84 86 "" NOTE_INSN_DELETED)

(insn/i 86 85 89 (set (subreg:SI (reg:HI 111) 0)
        (ior:SI (reg:SI 114)
            (reg:SI 117))) 143 {iorsi3+1} (insn_list 81 (insn_list 78 (nil)))
    (expr_list:REG_DEAD (reg:SI 117)
        (expr_list:REG_DEAD (reg:SI 114)
            (nil))))

(note/i 89 86 92 ("hisi.c") 20)

(note 92 89 93 0x2abe1e00 NOTE_INSN_BLOCK_END)

(note 93 92 95 ("hisi.c") 65)

(insn 95 93 99 (set (reg:SI 122)
        (ior:SI (reg:SI 103)
            (reg:SI 106))) 143 {iorsi3+1} (insn_list 53 (insn_list 50 (nil)))
    (expr_list:REG_DEAD (reg:SI 106)
        (expr_list:REG_DEAD (reg:SI 103)
            (nil))))

(insn 99 95 101 (set (reg:SI 124)
        (plus:SI (reg:SI 122)
            (subreg:SI (reg:HI 111) 0))) 3 {addsi3_internal} (insn_list 86 (insn_list 95 (nil)))
    (expr_list:REG_DEAD (reg:HI 111)
        (expr_list:REG_DEAD (reg:SI 122)
            (nil))))

(insn 101 99 102 (set (mem/f:SI (symbol_ref:SI ("result")) 3)
        (reg:SI 124)) 236 {movsi_internal2} (insn_list 99 (nil))
    (expr_list:REG_DEAD (reg:SI 124)
        (nil)))

(note 102 101 104 ("hisi.c") 68)

(note 104 102 106 "" NOTE_INSN_DELETED)

(insn 106 104 107 (set (reg:SI 4 a0)
        (symbol_ref:SI ("*$LC1"))) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC1"))
        (nil)))

(call_insn 107 106 108 (parallel[ 
            (set (reg:SI 2 v0)
                (call (mem:SI (symbol_ref:SI ("printf")) 0)
                    (const_int 16 [0x10])))
            (clobber (reg:SI 31 ra))
        ] ) -1 (insn_list 106 (nil))
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_UNUSED (reg:SI 2 v0)
            (expr_list:REG_UNUSED (reg:SI 31 ra)
                (nil))))
    (expr_list (use (reg:SI 4 a0))
        (nil)))

(note 108 107 109 ("hisi.c") 69)

(call_insn 109 108 110 (parallel[ 
            (call (mem:SI (symbol_ref:SI ("show_res")) 0)
                (const_int 16 [0x10]))
            (clobber (reg:SI 31 ra))
        ] ) -1 (nil)
    (expr_list:REG_UNUSED (reg:SI 31 ra)
        (nil))
    (nil))

(note 110 109 112 ("hisi.c") 71)

(insn 112 110 114 (set (reg:SI 126)
        (mem/f:SI (symbol_ref:SI ("result")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 114 112 115 (set (reg:SI 127)
        (mem/v/f:SI (symbol_ref:SI ("expected")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(jump_insn 115 114 116 (set (pc)
        (if_then_else (ne:SI (reg:SI 126)
                (reg:SI 127))
            (label_ref 127)
            (pc))) 341 {branch_equality} (insn_list 112 (insn_list 114 (nil)))
    (expr_list:REG_DEAD (reg:SI 126)
        (expr_list:REG_DEAD (reg:SI 127)
            (nil))))
;; End of basic block 0

(note 116 115 158 ("hisi.c") 72)

;; Start of basic block 1, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(note 158 116 120 [bb 1] NOTE_INSN_BASIC_BLOCK)

(note 120 158 122 "" NOTE_INSN_DELETED)

(insn 122 120 123 (set (reg:SI 4 a0)
        (symbol_ref:SI ("*$LC2"))) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC2"))
        (nil)))

(call_insn 123 122 124 (parallel[ 
            (set (reg:SI 2 v0)
                (call (mem:SI (symbol_ref:SI ("printf")) 0)
                    (const_int 16 [0x10])))
            (clobber (reg:SI 31 ra))
        ] ) -1 (insn_list 122 (nil))
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_UNUSED (reg:SI 2 v0)
            (expr_list:REG_UNUSED (reg:SI 31 ra)
                (nil))))
    (expr_list (use (reg:SI 4 a0))
        (nil)))

(note 124 123 125 ("hisi.c") 73)

(jump_insn 125 124 126 (set (pc)
        (label_ref 137)) -1 (nil)
    (nil))
;; End of basic block 1

(barrier 126 125 127)

;; Start of basic block 2, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(code_label 127 126 160 9 "" "" [num uses: 1])

(note 160 127 128 [bb 2] NOTE_INSN_BASIC_BLOCK)

(note 128 160 132 ("hisi.c") 75)

(note 132 128 134 "" NOTE_INSN_DELETED)

(insn 134 132 135 (set (reg:SI 4 a0)
        (symbol_ref:SI ("*$LC3"))) 236 {movsi_internal2} (nil)
    (expr_list:REG_EQUAL (symbol_ref:SI ("*$LC3"))
        (nil)))

(call_insn 135 134 159 (parallel[ 
            (set (reg:SI 2 v0)
                (call (mem:SI (symbol_ref:SI ("printf")) 0)
                    (const_int 16 [0x10])))
            (clobber (reg:SI 31 ra))
        ] ) -1 (insn_list 134 (nil))
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_UNUSED (reg:SI 2 v0)
            (expr_list:REG_UNUSED (reg:SI 31 ra)
                (nil))))
    (expr_list (use (reg:SI 4 a0))
        (nil)))

(insn 159 135 136 (use (const_int 0 [0x0])) -1 (nil)
    (nil))
;; End of basic block 2

(note 136 159 137 ("hisi.c") 76)

;; Start of basic block 3, registers live: 1 [$1] 28 [$28] 29 [$sp] 30 [$fp]
(code_label 137 136 161 10 "" "" [num uses: 1])

(note 161 137 138 [bb 3] NOTE_INSN_BASIC_BLOCK)

(note 138 161 140 ("hisi.c") 77)

(insn 140 138 142 (set (reg:SI 131)
        (mem/f:SI (symbol_ref:SI ("result")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 142 140 144 (set (reg:SI 132)
        (mem/v/f:SI (symbol_ref:SI ("expected")) 3)) 236 {movsi_internal2} (nil)
    (nil))

(insn 144 142 146 (set (reg:SI 134)
        (xor:SI (reg:SI 131)
            (reg:SI 132))) 150 {xorsi3+1} (insn_list 140 (insn_list 142 (nil)))
    (expr_list:REG_DEAD (reg:SI 131)
        (expr_list:REG_DEAD (reg:SI 132)
            (nil))))

(note 146 144 148 "" NOTE_INSN_DELETED)

(insn 148 146 151 (set (reg/i:SI 2 v0)
        (ne:SI (reg:SI 134)
            (const_int 0 [0x0]))) 367 {sne_si_zero} (insn_list 144 (nil))
    (expr_list:REG_DEAD (reg:SI 134)
        (nil)))
;; End of basic block 3

(note 151 148 152 ("hisi.c") 78)

(note 152 151 0 (nil) NOTE_INSN_BLOCK_END)


;; Function uswb16

(note 1 0 43 ("hisi.c") 16)

;; Start of basic block 0, registers live: 1 [$1] 4 [$4] 28 [$28] 29 [$sp] 30 [$fp]
(note 43 1 4 [bb 0] NOTE_INSN_BASIC_BLOCK)

(note 4 43 6 "" NOTE_INSN_DELETED)

(insn 6 4 9 (set (reg:SI 83)
        (zero_extend:SI (subreg:HI (reg:SI 4 a0) 0))) 174 {zero_extendhisi2+1} (nil)
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (nil)))

(note 9 6 11 "" NOTE_INSN_FUNCTION_BEG)

(note 11 9 15 ("hisi.c") 17)

(insn 15 11 19 (set (reg:SI 85)
        (and:SI (reg:SI 83)
            (const_int 255 [0xff]))) 135 {andsi3+1} (insn_list 6 (nil))
    (nil))

(insn 19 15 21 (set (reg:SI 87)
        (ashift:SI (reg:SI 85)
            (const_int 8 [0x8]))) 283 {ashlsi3_internal1} (insn_list 15 (nil))
    (expr_list:REG_DEAD (reg:SI 85)
        (nil)))

(note 21 19 23 "" NOTE_INSN_DELETED)

(note 23 21 25 "" NOTE_INSN_DELETED)

(insn 25 23 31 (set (reg:SI 90)
        (lshiftrt:SI (reg:SI 83)
            (const_int 8 [0x8]))) 313 {lshrsi3_internal1} (nil)
    (expr_list:REG_DEAD (reg:SI 83)
        (nil)))

(note 31 25 33 "" NOTE_INSN_DELETED)

(note 33 31 35 "" NOTE_INSN_DELETED)

(insn 35 33 38 (set (reg/i:SI 2 v0)
        (ior:SI (reg:SI 87)
            (reg:SI 90))) 143 {iorsi3+1} (insn_list 19 (insn_list 25 (nil)))
    (expr_list:REG_DEAD (reg:SI 87)
        (expr_list:REG_DEAD (reg:SI 90)
            (nil))))
;; End of basic block 0

(note 38 35 0 ("hisi.c") 20)


;; Function uswb32

(note 1 0 45 ("hisi.c") 26)

;; Start of basic block 0, registers live: 1 [$1] 4 [$4] 28 [$28] 29 [$sp] 30 [$fp]
(note 45 1 4 [bb 0] NOTE_INSN_BASIC_BLOCK)

(insn 4 45 5 (set (reg/v:SI 81)
        (reg:SI 4 a0)) 236 {movsi_internal2} (nil)
    (expr_list:REG_DEAD (reg:SI 4 a0)
        (expr_list:REG_EQUIV (mem/f:SI (reg:SI 0 $0) 2)
            (nil))))

(note 5 4 7 "" NOTE_INSN_FUNCTION_BEG)

(note 7 5 11 ("hisi.c") 27)

(note 11 7 13 "" NOTE_INSN_DELETED)

(insn 13 11 15 (set (reg:SI 84)
        (ashift:SI (reg/v:SI 81)
            (const_int 24 [0x18]))) 283 {ashlsi3_internal1} (insn_list 4 (nil))
    (nil))

(insn 15 13 17 (set (reg:SI 85)
        (and:SI (reg/v:SI 81)
            (const_int 65280 [0xff00]))) 135 {andsi3+1} (nil)
    (nil))

(insn 17 15 19 (set (reg:SI 86)
        (ashift:SI (reg:SI 85)
            (const_int 8 [0x8]))) 283 {ashlsi3_internal1} (insn_list 15 (nil))
    (expr_list:REG_DEAD (reg:SI 85)
        (nil)))

(insn 19 17 21 (set (reg:SI 87)
        (ior:SI (reg:SI 84)
            (reg:SI 86))) 143 {iorsi3+1} (insn_list 13 (insn_list 17 (nil)))
    (expr_list:REG_DEAD (reg:SI 84)
        (expr_list:REG_DEAD (reg:SI 86)
            (nil))))

(note 21 19 23 "" NOTE_INSN_DELETED)

(insn 23 21 25 (set (reg:SI 88)
        (lshiftrt:SI (reg/v:SI 81)
            (const_int 8 [0x8]))) 313 {lshrsi3_internal1} (nil)
    (nil))

(insn 25 23 27 (set (reg:SI 90)
        (and:SI (reg:SI 88)
            (const_int 65280 [0xff00]))) 135 {andsi3+1} (insn_list 23 (nil))
    (expr_list:REG_DEAD (reg:SI 88)
        (nil)))

(insn 27 25 29 (set (reg:SI 91)
        (ior:SI (reg:SI 87)
            (reg:SI 90))) 143 {iorsi3+1} (insn_list 19 (insn_list 25 (nil)))
    (expr_list:REG_DEAD (reg:SI 87)
        (expr_list:REG_DEAD (reg:SI 90)
            (nil))))

(note 29 27 31 "" NOTE_INSN_DELETED)

(note 31 29 33 "" NOTE_INSN_DELETED)

(insn 33 31 35 (set (reg:SI 94)
        (lshiftrt:SI (reg/v:SI 81)
            (const_int 24 [0x18]))) 313 {lshrsi3_internal1} (nil)
    (expr_list:REG_DEAD (reg/v:SI 81)
        (nil)))

(note 35 33 37 "" NOTE_INSN_DELETED)

(insn 37 35 40 (set (reg/i:SI 2 v0)
        (ior:SI (reg:SI 91)
            (reg:SI 94))) 143 {iorsi3+1} (insn_list 33 (insn_list 27 (nil)))
    (expr_list:REG_DEAD (reg:SI 94)
        (expr_list:REG_DEAD (reg:SI 91)
            (nil))))
;; End of basic block 0

(note 40 37 0 ("hisi.c") 32)


;; Combiner totals: 168 attempts, 149 substitutions (10 requiring new space),
;; 25 successes.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]