blob: 34abdc7aae0df4e3139ce1b423fbac6ffe80d04a [file] [log] [blame]
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +00001; RUN: opt < %s -reassociate -die -S | FileCheck %s
Dan Gohmanf17a25c2007-07-18 16:29:46 +00002
Tanya Lattner028031a2008-03-19 04:36:04 +00003define i32 @test1(i32 %a, i32 %b) {
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +00004 %tmp.2 = and i32 %b, %a
5 %tmp.4 = xor i32 %a, -1
Tanya Lattner028031a2008-03-19 04:36:04 +00006 ; (A&B)&~A == 0
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +00007 %tmp.5 = and i32 %tmp.2, %tmp.4
Tanya Lattner028031a2008-03-19 04:36:04 +00008 ret i32 %tmp.5
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +00009; CHECK: @test1
10; CHECK: ret i32 0
Dan Gohmanf17a25c2007-07-18 16:29:46 +000011}
12
Tanya Lattner028031a2008-03-19 04:36:04 +000013define i32 @test2(i32 %a, i32 %b) {
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +000014 %tmp.1 = and i32 %a, 1234
15 %tmp.2 = and i32 %b, %tmp.1
16 %tmp.4 = xor i32 %a, -1
Tanya Lattner028031a2008-03-19 04:36:04 +000017 ; A&~A == 0
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +000018 %tmp.5 = and i32 %tmp.2, %tmp.4
Tanya Lattner028031a2008-03-19 04:36:04 +000019 ret i32 %tmp.5
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +000020; CHECK: @test2
21; CHECK: ret i32 0
Dan Gohmanf17a25c2007-07-18 16:29:46 +000022}
23
Tanya Lattner028031a2008-03-19 04:36:04 +000024define i32 @test3(i32 %b, i32 %a) {
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +000025 %tmp.1 = add i32 %a, 1234
26 %tmp.2 = add i32 %b, %tmp.1
27 %tmp.4 = sub i32 0, %a
Tanya Lattner028031a2008-03-19 04:36:04 +000028 ; (b+(a+1234))+-a -> b+1234
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +000029 %tmp.5 = add i32 %tmp.2, %tmp.4
Tanya Lattner028031a2008-03-19 04:36:04 +000030 ret i32 %tmp.5
Chris Lattnerf0b4b0e2010-01-18 21:58:32 +000031; CHECK: @test3
32; CHECK: %tmp.5 = add i32 %b, 1234
33; CHECK: ret i32 %tmp.5
Dan Gohmanf17a25c2007-07-18 16:29:46 +000034}