blob: 1a8d0c25bd22fff9a6601c4b4504ddda722a35fc [file] [log] [blame]
Chandler Carruthf6182152012-12-28 14:23:29 +00001; RUN: opt < %s -instsimplify -S | FileCheck %s
2
3declare {i8, i1} @llvm.uadd.with.overflow.i8(i8 %a, i8 %b)
4
5define i1 @test_uadd1() {
6; CHECK: @test_uadd1
7 %x = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 254, i8 3)
8 %overflow = extractvalue {i8, i1} %x, 1
9 ret i1 %overflow
10; CHECK-NEXT: ret i1 true
11}
12
13define i8 @test_uadd2() {
14; CHECK: @test_uadd2
15 %x = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 254, i8 44)
16 %result = extractvalue {i8, i1} %x, 0
17 ret i8 %result
18; CHECK-NEXT: ret i8 42
19}
20
21declare i256 @llvm.cttz.i256(i256 %src, i1 %is_zero_undef)
22
23define i256 @test_cttz() {
24; CHECK: @test_cttz
25 %x = call i256 @llvm.cttz.i256(i256 10, i1 false)
26 ret i256 %x
27; CHECK-NEXT: ret i256 1
28}
29
30declare i256 @llvm.ctpop.i256(i256 %src)
31
32define i256 @test_ctpop() {
33; CHECK: @test_ctpop
34 %x = call i256 @llvm.ctpop.i256(i256 10)
35 ret i256 %x
36; CHECK-NEXT: ret i256 2
37}
38
39; Test a non-intrinsic that we know about as a library call.
40declare float @fabs(float %x)
41
42define float @test_fabs_libcall() {
43; CHECK: @test_fabs_libcall
44
45 %x = call float @fabs(float -42.0)
46; This is still a real function call, so instsimplify won't nuke it -- other
47; passes have to do that.
48; CHECK-NEXT: call float @fabs
49
50 ret float %x
51; CHECK-NEXT: ret float 4.2{{0+}}e+01
52}