blob: 23aa616477876b382d11584ee45bf9e801eca970 [file] [log] [blame]
Chris Lattnerb7920f12010-04-15 04:48:01 +00001; rdar://7860110
2; RUN: llc < %s | FileCheck %s
3target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
4target triple = "x86_64-apple-darwin10.2"
5
6define void @test1(i32* nocapture %a0, i8 zeroext %a1) nounwind ssp {
7entry:
8 %A = load i32* %a0, align 4
9 %B = and i32 %A, -256 ; 0xFFFFFF00
10 %C = zext i8 %a1 to i32
11 %D = or i32 %C, %B
12 store i32 %D, i32* %a0, align 4
13 ret void
14
15; CHECK: test1:
16; CHECK: movb %sil, (%rdi)
17}
18
19define void @test2(i32* nocapture %a0, i8 zeroext %a1) nounwind ssp {
20entry:
21 %A = load i32* %a0, align 4
22 %B = and i32 %A, -65281 ; 0xFFFF00FF
23 %C = zext i8 %a1 to i32
24 %CS = shl i32 %C, 8
25 %D = or i32 %B, %CS
26 store i32 %D, i32* %a0, align 4
27 ret void
28; CHECK: test2:
29; CHECK: movb %sil, 1(%rdi)
30}
31
32define void @test3(i32* nocapture %a0, i16 zeroext %a1) nounwind ssp {
33entry:
34 %A = load i32* %a0, align 4
35 %B = and i32 %A, -65536 ; 0xFFFF0000
36 %C = zext i16 %a1 to i32
37 %D = or i32 %B, %C
38 store i32 %D, i32* %a0, align 4
39 ret void
40; CHECK: test3:
41; CHECK: movw %si, (%rdi)
42}
43
44define void @test4(i32* nocapture %a0, i16 zeroext %a1) nounwind ssp {
45entry:
46 %A = load i32* %a0, align 4
47 %B = and i32 %A, 65535 ; 0x0000FFFF
48 %C = zext i16 %a1 to i32
49 %CS = shl i32 %C, 16
50 %D = or i32 %B, %CS
51 store i32 %D, i32* %a0, align 4
52 ret void
53; CHECK: test4:
54; CHECK: movw %si, 2(%rdi)
55}
56
57define void @test5(i64* nocapture %a0, i16 zeroext %a1) nounwind ssp {
58entry:
59 %A = load i64* %a0, align 4
60 %B = and i64 %A, -4294901761 ; 0xFFFFFFFF0000FFFF
61 %C = zext i16 %a1 to i64
62 %CS = shl i64 %C, 16
63 %D = or i64 %B, %CS
64 store i64 %D, i64* %a0, align 4
65 ret void
66; CHECK: test5:
67; CHECK: movw %si, 2(%rdi)
68}
69
70define void @test6(i64* nocapture %a0, i8 zeroext %a1) nounwind ssp {
71entry:
72 %A = load i64* %a0, align 4
73 %B = and i64 %A, -280375465082881 ; 0xFFFF00FFFFFFFFFF
74 %C = zext i8 %a1 to i64
75 %CS = shl i64 %C, 40
76 %D = or i64 %B, %CS
77 store i64 %D, i64* %a0, align 4
78 ret void
79; CHECK: test6:
80; CHECK: movb %sil, 5(%rdi)
81}