Edward O'Callaghan | bebe181 | 2009-11-22 11:45:44 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=ppc32 | FileCheck %s -check-prefix=X32 |
| 2 | ; RUN: llc < %s -march=ppc64 | FileCheck %s -check-prefix=X64 |
| 3 | |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 4 | |
Tanya Lattner | 348c618 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 5 | define void @STWBRX(i32 %i, i8* %ptr, i32 %off) { |
| 6 | %tmp1 = getelementptr i8* %ptr, i32 %off ; <i8*> [#uses=1] |
| 7 | %tmp1.upgrd.1 = bitcast i8* %tmp1 to i32* ; <i32*> [#uses=1] |
| 8 | %tmp13 = tail call i32 @llvm.bswap.i32( i32 %i ) ; <i32> [#uses=1] |
| 9 | store i32 %tmp13, i32* %tmp1.upgrd.1 |
| 10 | ret void |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 11 | } |
| 12 | |
Tanya Lattner | 348c618 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 13 | define i32 @LWBRX(i8* %ptr, i32 %off) { |
| 14 | %tmp1 = getelementptr i8* %ptr, i32 %off ; <i8*> [#uses=1] |
| 15 | %tmp1.upgrd.2 = bitcast i8* %tmp1 to i32* ; <i32*> [#uses=1] |
| 16 | %tmp = load i32* %tmp1.upgrd.2 ; <i32> [#uses=1] |
| 17 | %tmp14 = tail call i32 @llvm.bswap.i32( i32 %tmp ) ; <i32> [#uses=1] |
| 18 | ret i32 %tmp14 |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 19 | } |
| 20 | |
Tanya Lattner | 348c618 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 21 | define void @STHBRX(i16 %s, i8* %ptr, i32 %off) { |
| 22 | %tmp1 = getelementptr i8* %ptr, i32 %off ; <i8*> [#uses=1] |
| 23 | %tmp1.upgrd.3 = bitcast i8* %tmp1 to i16* ; <i16*> [#uses=1] |
| 24 | %tmp5 = call i16 @llvm.bswap.i16( i16 %s ) ; <i16> [#uses=1] |
| 25 | store i16 %tmp5, i16* %tmp1.upgrd.3 |
| 26 | ret void |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 27 | } |
| 28 | |
Tanya Lattner | 348c618 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 29 | define i16 @LHBRX(i8* %ptr, i32 %off) { |
| 30 | %tmp1 = getelementptr i8* %ptr, i32 %off ; <i8*> [#uses=1] |
| 31 | %tmp1.upgrd.4 = bitcast i8* %tmp1 to i16* ; <i16*> [#uses=1] |
| 32 | %tmp = load i16* %tmp1.upgrd.4 ; <i16> [#uses=1] |
| 33 | %tmp6 = call i16 @llvm.bswap.i16( i16 %tmp ) ; <i16> [#uses=1] |
| 34 | ret i16 %tmp6 |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 35 | } |
| 36 | |
Tanya Lattner | 348c618 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 37 | declare i32 @llvm.bswap.i32(i32) |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 38 | |
Tanya Lattner | 348c618 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 39 | declare i16 @llvm.bswap.i16(i16) |
| 40 | |
Edward O'Callaghan | bebe181 | 2009-11-22 11:45:44 +0000 | [diff] [blame] | 41 | |
Edward O'Callaghan | ba92a65 | 2009-11-22 12:50:05 +0000 | [diff] [blame] | 42 | ; X32: stwbrx |
| 43 | ; X32: lwbrx |
| 44 | ; X32: sthbrx |
| 45 | ; X32: lhbrx |
Edward O'Callaghan | bebe181 | 2009-11-22 11:45:44 +0000 | [diff] [blame] | 46 | |
Edward O'Callaghan | ba92a65 | 2009-11-22 12:50:05 +0000 | [diff] [blame] | 47 | ; X64: stwbrx |
| 48 | ; X64: lwbrx |
| 49 | ; X64: sthbrx |
| 50 | ; X64: lhbrx |
Edward O'Callaghan | bebe181 | 2009-11-22 11:45:44 +0000 | [diff] [blame] | 51 | |