2 ; RUN: opt -S -instcombine < %s | FileCheck %s
3 target triple = "x86_64-apple-macosx10.6.6"
5 define zeroext i16 @foo1(i32 %on_off) nounwind uwtable ssp {
7 %on_off.addr = alloca i32, align 4
8 %a = alloca i32, align 4
9 store i32 %on_off, i32* %on_off.addr, align 4
10 %tmp = load i32* %on_off.addr, align 4
11 %sub = sub i32 1, %tmp
13 %mul = mul i32 %sub, -2
16 store i32 %mul, i32* %a, align 4
17 %tmp1 = load i32* %a, align 4
18 %conv = trunc i32 %tmp1 to i16
22 define zeroext i16 @foo2(i32 %on_off, i32 %q) nounwind uwtable ssp {
24 %on_off.addr = alloca i32, align 4
25 %q.addr = alloca i32, align 4
26 %a = alloca i32, align 4
27 store i32 %on_off, i32* %on_off.addr, align 4
28 store i32 %q, i32* %q.addr, align 4
29 %tmp = load i32* %q.addr, align 4
30 %tmp1 = load i32* %on_off.addr, align 4
31 %sub = sub i32 %tmp, %tmp1
33 %mul = mul i32 %sub, -4
36 store i32 %mul, i32* %a, align 4
37 %tmp2 = load i32* %a, align 4
38 %conv = trunc i32 %tmp2 to i16
42 define zeroext i16 @foo3(i32 %on_off) nounwind uwtable ssp {
44 %on_off.addr = alloca i32, align 4
45 %a = alloca i32, align 4
46 store i32 %on_off, i32* %on_off.addr, align 4
47 %tmp = load i32* %on_off.addr, align 4
48 %sub = sub i32 7, %tmp
50 %mul = mul i32 %sub, -4
53 store i32 %mul, i32* %a, align 4
54 %tmp1 = load i32* %a, align 4
55 %conv = trunc i32 %tmp1 to i16