Dan Gohman | b7c0b24 | 2009-09-11 18:36:27 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=cellspu | FileCheck %s |
Scott Michel | 9c0c6b2 | 2008-11-21 02:56:16 +0000 | [diff] [blame] | 2 | |
| 3 | ; ModuleID = 'loads.bc' |
| 4 | target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128" |
| 5 | target triple = "spu" |
| 6 | |
| 7 | define <4 x float> @load_v4f32_1(<4 x float>* %a) nounwind readonly { |
| 8 | entry: |
| 9 | %tmp1 = load <4 x float>* %a |
| 10 | ret <4 x float> %tmp1 |
Scott Michel | f6045fe8 | 2009-08-24 23:57:35 +0000 | [diff] [blame] | 11 | ; CHECK: lqd $3, 0($3) |
Scott Michel | 9c0c6b2 | 2008-11-21 02:56:16 +0000 | [diff] [blame] | 12 | } |
| 13 | |
| 14 | define <4 x float> @load_v4f32_2(<4 x float>* %a) nounwind readonly { |
| 15 | entry: |
Scott Michel | f6045fe8 | 2009-08-24 23:57:35 +0000 | [diff] [blame] | 16 | %arrayidx = getelementptr <4 x float>* %a, i32 1 |
| 17 | %tmp1 = load <4 x float>* %arrayidx |
Scott Michel | 9c0c6b2 | 2008-11-21 02:56:16 +0000 | [diff] [blame] | 18 | ret <4 x float> %tmp1 |
Scott Michel | f6045fe8 | 2009-08-24 23:57:35 +0000 | [diff] [blame] | 19 | ; CHECK: lqd $3, 16($3) |
Scott Michel | 9c0c6b2 | 2008-11-21 02:56:16 +0000 | [diff] [blame] | 20 | } |
Kalle Raiskila | 11fe246 | 2010-06-01 13:34:47 +0000 | [diff] [blame] | 21 | |
| 22 | |
| 23 | declare <4 x i32>* @getv4f32ptr() |
| 24 | define <4 x i32> @func() { |
Kalle Raiskila | 951b229 | 2010-06-21 15:08:16 +0000 | [diff] [blame] | 25 | ;CHECK: brasl |
| 26 | ; we need to have some instruction to move the result to safety. |
| 27 | ; which instruction (lr, stqd...) depends on the regalloc |
| 28 | ;CHECK: {{.*}} |
| 29 | ;CHECK: brasl |
| 30 | %rv1 = call <4 x i32>* @getv4f32ptr() |
| 31 | %rv2 = call <4 x i32>* @getv4f32ptr() |
| 32 | %rv3 = load <4 x i32>* %rv1 |
| 33 | ret <4 x i32> %rv3 |
Kalle Raiskila | 11fe246 | 2010-06-01 13:34:47 +0000 | [diff] [blame] | 34 | } |
| 35 | |
Kalle Raiskila | c6166c6 | 2010-06-09 08:29:41 +0000 | [diff] [blame] | 36 | define <4 x float> @load_undef(){ |
Benjamin Kramer | a2938e7 | 2010-06-26 20:05:06 +0000 | [diff] [blame] | 37 | ; CHECK: lqd $3, 0($3) |
Kalle Raiskila | c6166c6 | 2010-06-09 08:29:41 +0000 | [diff] [blame] | 38 | %val = load <4 x float>* undef |
| 39 | ret <4 x float> %val |
| 40 | } |
Kalle Raiskila | 7ea1ab5 | 2010-11-12 10:14:03 +0000 | [diff] [blame] | 41 | |
| 42 | ;check that 'misaligned' loads that may span two memory chunks |
| 43 | ;have two loads. Don't check for the bitmanipulation, as that |
| 44 | ;might change with improved algorithms or scheduling |
| 45 | define i32 @load_misaligned( i32* %ptr ){ |
| 46 | ;CHECK: load_misaligned |
| 47 | ;CHECK: lqd |
| 48 | ;CHECK: lqd |
| 49 | ;CHECK: bi $lr |
| 50 | %rv = load i32* %ptr, align 2 |
| 51 | ret i32 %rv |
| 52 | } |