Chad Rosier | 22d275f | 2013-02-08 18:00:14 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -instcombine -S | FileCheck %s |
| 2 | ; Verify that the non-default calling conv doesn't prevent the libcall simplification |
| 3 | |
| 4 | @.str = private unnamed_addr constant [4 x i8] c"abc\00", align 1 |
| 5 | |
| 6 | define arm_aapcscc i32 @_abs(i32 %i) nounwind readnone { |
| 7 | ; CHECK: _abs |
| 8 | %call = tail call arm_aapcscc i32 @abs(i32 %i) nounwind readnone |
| 9 | ret i32 %call |
| 10 | ; CHECK: %[[ISPOS:.*]] = icmp sgt i32 %i, -1 |
| 11 | ; CHECK: %[[NEG:.*]] = sub i32 0, %i |
| 12 | ; CHECK: %[[RET:.*]] = select i1 %[[ISPOS]], i32 %i, i32 %[[NEG]] |
| 13 | ; CHECK: ret i32 %[[RET]] |
| 14 | } |
| 15 | |
| 16 | declare arm_aapcscc i32 @abs(i32) nounwind readnone |
| 17 | |
| 18 | define arm_aapcscc i32 @_labs(i32 %i) nounwind readnone { |
| 19 | ; CHECK: _labs |
| 20 | %call = tail call arm_aapcscc i32 @labs(i32 %i) nounwind readnone |
| 21 | ret i32 %call |
| 22 | ; CHECK: %[[ISPOS:.*]] = icmp sgt i32 %i, -1 |
| 23 | ; CHECK: %[[NEG:.*]] = sub i32 0, %i |
| 24 | ; CHECK: %[[RET:.*]] = select i1 %[[ISPOS]], i32 %i, i32 %[[NEG]] |
| 25 | ; CHECK: ret i32 %[[RET]] |
| 26 | } |
| 27 | |
| 28 | declare arm_aapcscc i32 @labs(i32) nounwind readnone |
| 29 | |
| 30 | define arm_aapcscc i32 @_strlen1() { |
| 31 | ; CHECK: _strlen1 |
David Blaikie | f72d05b | 2015-03-13 18:20:45 +0000 | [diff] [blame] | 32 | %call = tail call arm_aapcscc i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0)) |
Chad Rosier | 22d275f | 2013-02-08 18:00:14 +0000 | [diff] [blame] | 33 | ret i32 %call |
| 34 | ; CHECK: ret i32 3 |
| 35 | } |
| 36 | |
| 37 | declare arm_aapcscc i32 @strlen(i8*) |
| 38 | |
| 39 | define arm_aapcscc zeroext i1 @_strlen2(i8* %str) { |
| 40 | ; CHECK: _strlen2 |
| 41 | %call = tail call arm_aapcscc i32 @strlen(i8* %str) |
| 42 | %cmp = icmp ne i32 %call, 0 |
| 43 | ret i1 %cmp |
| 44 | |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 45 | ; CHECK: %[[STRLENFIRST:.*]] = load i8, i8* %str |
Chad Rosier | 22d275f | 2013-02-08 18:00:14 +0000 | [diff] [blame] | 46 | ; CHECK: %[[CMP:.*]] = icmp ne i8 %[[STRLENFIRST]], 0 |
| 47 | ; CHECK: ret i1 %[[CMP]] |
| 48 | } |