File: pr166870.ll

package info (click to toggle)
llvm-toolchain-21 1%3A21.1.6-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,245,028 kB
  • sloc: cpp: 7,619,726; ansic: 1,434,018; asm: 1,058,748; python: 252,740; f90: 94,671; objc: 70,685; lisp: 42,813; pascal: 18,401; sh: 8,601; ml: 5,111; perl: 4,720; makefile: 3,675; awk: 3,523; javascript: 2,409; xml: 892; fortran: 770
file content (68 lines) | stat: -rw-r--r-- 1,953 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -O3 < %s -mtriple=aarch64 | FileCheck %s

; The seemingly redundant mov where src_reg == dst_reg shouldn't be removed,
; because it has the effect of zeroing the upper bits in x8.

define i32 @ham(i32 %arg, i1 %arg1, i1 %arg2, ptr %arg3) nounwind {
; CHECK-LABEL: ham:
; CHECK:       // %bb.0: // %bb
; CHECK-NEXT:    stp x30, x21, [sp, #-32]! // 16-byte Folded Spill
; CHECK-NEXT:    stp x20, x19, [sp, #16] // 16-byte Folded Spill
; CHECK-NEXT:    tbnz w1, #0, .LBB0_3
; CHECK-NEXT:  // %bb.1: // %bb4
; CHECK-NEXT:    tbnz w2, #0, .LBB0_3
; CHECK-NEXT:  // %bb.2: // %bb5
; CHECK-NEXT:    mov x19, x3
; CHECK-NEXT:    mov w21, w1
; CHECK-NEXT:    mov w20, w0
; CHECK-NEXT:    bl zot
; CHECK-NEXT:    tbz w21, #0, .LBB0_4
; CHECK-NEXT:  .LBB0_3: // %bb6
; CHECK-NEXT:    ldp x20, x19, [sp, #16] // 16-byte Folded Reload
; CHECK-NEXT:    mov w0, wzr
; CHECK-NEXT:    ldp x30, x21, [sp], #32 // 16-byte Folded Reload
; CHECK-NEXT:    ret
; CHECK-NEXT:  .LBB0_4:
; CHECK-NEXT:    mov w8, w20
; CHECK-NEXT:    mov w20, wzr
; CHECK-NEXT:    mov w8, w8
; CHECK-NEXT:    mov w21, w8
; CHECK-NEXT:  .LBB0_5: // %bb7
; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
; CHECK-NEXT:    strb w20, [x19]
; CHECK-NEXT:    cbnz x21, .LBB0_5
; CHECK-NEXT:  // %bb.6: // %bb8
; CHECK-NEXT:    // in Loop: Header=BB0_5 Depth=1
; CHECK-NEXT:    bl quux
; CHECK-NEXT:    b .LBB0_5
bb:
  br i1 %arg1, label %bb6, label %bb4

bb4:
  %load = load ptr, ptr null, align 8
  br i1 %arg2, label %bb6, label %bb5

bb5:
  %call = call i32 @zot() #0
  %zext = zext i32 %arg to i64
  br i1 %arg1, label %bb6, label %bb7

bb6:
  ret i32 0

bb7:
  store i8 0, ptr %arg3, align 1
  %icmp = icmp eq i64 %zext, 0
  br i1 %icmp, label %bb8, label %bb7

bb8:
  call void @quux()
  br label %bb7
}

declare i32 @zot()

declare void @quux()

attributes #0 = { returns_twice }