Nadav Rotem | 4536d58 | 2013-03-20 22:53:44 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=arm -mtriple="thumbv7-apple-ios3.0.0" | FileCheck %s |
| 2 | |
| 3 | target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32" |
| 4 | |
| 5 | %struct.eggs = type { %struct.spam, i16 } |
| 6 | %struct.spam = type { [3 x i32] } |
| 7 | %struct.barney = type { [2 x i32], [2 x i32] } |
| 8 | |
Jay Foad | a0653a3 | 2014-05-14 21:14:37 +0000 | [diff] [blame] | 9 | ; Make sure that the sext op does not get lost due to computeKnownBits. |
Nadav Rotem | 4536d58 | 2013-03-20 22:53:44 +0000 | [diff] [blame] | 10 | ; CHECK: quux |
| 11 | ; CHECK: lsl |
| 12 | ; CHECK: asr |
| 13 | ; CHECK: bl |
| 14 | ; CHECK: pop |
| 15 | define void @quux(%struct.eggs* %arg) { |
| 16 | bb: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 17 | %tmp1 = getelementptr inbounds %struct.eggs, %struct.eggs* %arg, i32 0, i32 1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 18 | %0 = load i16, i16* %tmp1, align 2 |
Nadav Rotem | 4536d58 | 2013-03-20 22:53:44 +0000 | [diff] [blame] | 19 | %tobool = icmp eq i16 %0, 0 |
| 20 | br i1 %tobool, label %bb16, label %bb3 |
| 21 | |
| 22 | bb3: ; preds = %bb |
| 23 | %tmp4 = bitcast i16* %tmp1 to i8* |
| 24 | %tmp5 = ptrtoint i16* %tmp1 to i32 |
| 25 | %tmp6 = shl i32 %tmp5, 20 |
| 26 | %tmp7 = ashr exact i32 %tmp6, 20 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 27 | %tmp14 = getelementptr inbounds %struct.barney, %struct.barney* undef, i32 %tmp7 |
Nadav Rotem | 4536d58 | 2013-03-20 22:53:44 +0000 | [diff] [blame] | 28 | %tmp15 = tail call i32 @widget(%struct.barney* %tmp14, i8* %tmp4, i32 %tmp7) |
| 29 | br label %bb16 |
| 30 | |
| 31 | bb16: ; preds = %bb3, %bb |
| 32 | ret void |
| 33 | } |
| 34 | |
| 35 | declare i32 @widget(%struct.barney*, i8*, i32) |