File: umulo-128-legalisation-lowering.ll

package info (click to toggle)
llvm-toolchain-14 1%3A14.0.6-12
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,496,180 kB
  • sloc: cpp: 5,593,972; ansic: 986,872; asm: 585,869; python: 184,223; objc: 72,530; lisp: 31,119; f90: 27,793; javascript: 9,780; pascal: 9,762; sh: 9,482; perl: 7,468; ml: 5,432; awk: 3,523; makefile: 2,538; xml: 953; cs: 573; fortran: 567
file content (143 lines) | stat: -rw-r--r-- 5,518 bytes parent folder | download | duplicates (15)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=thumbv7-unknown-none-gnueabi | FileCheck %s --check-prefixes=THUMBV7

define { i128, i8 } @muloti_test(i128 %l, i128 %r) unnamed_addr #0 {
; THUMBV7-LABEL: muloti_test:
; THUMBV7:       @ %bb.0: @ %start
; THUMBV7-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
; THUMBV7-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr}
; THUMBV7-NEXT:    .pad #44
; THUMBV7-NEXT:    sub sp, #44
; THUMBV7-NEXT:    ldr.w lr, [sp, #88]
; THUMBV7-NEXT:    mov r11, r0
; THUMBV7-NEXT:    ldr r4, [sp, #96]
; THUMBV7-NEXT:    ldr.w r12, [sp, #80]
; THUMBV7-NEXT:    umull r1, r5, r2, lr
; THUMBV7-NEXT:    umull r7, r6, r3, r4
; THUMBV7-NEXT:    str r1, [sp, #40] @ 4-byte Spill
; THUMBV7-NEXT:    ldr r1, [sp, #100]
; THUMBV7-NEXT:    umull r4, r0, r4, r2
; THUMBV7-NEXT:    str r7, [sp, #32] @ 4-byte Spill
; THUMBV7-NEXT:    umull r7, r1, r1, r2
; THUMBV7-NEXT:    str r4, [sp, #24] @ 4-byte Spill
; THUMBV7-NEXT:    str r0, [sp, #12] @ 4-byte Spill
; THUMBV7-NEXT:    ldr r0, [sp, #84]
; THUMBV7-NEXT:    str r7, [sp, #20] @ 4-byte Spill
; THUMBV7-NEXT:    ldr r7, [sp, #92]
; THUMBV7-NEXT:    umull r10, r8, r0, lr
; THUMBV7-NEXT:    umull r4, r9, r7, r12
; THUMBV7-NEXT:    str r4, [sp, #8] @ 4-byte Spill
; THUMBV7-NEXT:    umull r4, r0, r12, lr
; THUMBV7-NEXT:    mov.w r12, #0
; THUMBV7-NEXT:    umlal r5, r12, r3, lr
; THUMBV7-NEXT:    str r4, [sp, #16] @ 4-byte Spill
; THUMBV7-NEXT:    str r0, [sp, #4] @ 4-byte Spill
; THUMBV7-NEXT:    umull r4, r2, r2, r7
; THUMBV7-NEXT:    ldr r0, [sp, #40] @ 4-byte Reload
; THUMBV7-NEXT:    str r4, [sp, #28] @ 4-byte Spill
; THUMBV7-NEXT:    str r2, [sp, #36] @ 4-byte Spill
; THUMBV7-NEXT:    str.w r0, [r11]
; THUMBV7-NEXT:    ldr r0, [sp, #32] @ 4-byte Reload
; THUMBV7-NEXT:    ldr r2, [sp, #20] @ 4-byte Reload
; THUMBV7-NEXT:    add r2, r0
; THUMBV7-NEXT:    ldr r0, [sp, #12] @ 4-byte Reload
; THUMBV7-NEXT:    adds.w lr, r0, r2
; THUMBV7-NEXT:    mov.w r2, #0
; THUMBV7-NEXT:    adc r0, r2, #0
; THUMBV7-NEXT:    str r0, [sp, #32] @ 4-byte Spill
; THUMBV7-NEXT:    ldr r0, [sp, #8] @ 4-byte Reload
; THUMBV7-NEXT:    add.w r4, r10, r0
; THUMBV7-NEXT:    ldr r0, [sp, #4] @ 4-byte Reload
; THUMBV7-NEXT:    adds r4, r4, r0
; THUMBV7-NEXT:    adc r0, r2, #0
; THUMBV7-NEXT:    str r0, [sp, #40] @ 4-byte Spill
; THUMBV7-NEXT:    ldr r0, [sp, #24] @ 4-byte Reload
; THUMBV7-NEXT:    ldr r2, [sp, #16] @ 4-byte Reload
; THUMBV7-NEXT:    adds.w r10, r2, r0
; THUMBV7-NEXT:    mov r2, r3
; THUMBV7-NEXT:    adc.w r0, r4, lr
; THUMBV7-NEXT:    ldr.w lr, [sp, #100]
; THUMBV7-NEXT:    cmp r1, #0
; THUMBV7-NEXT:    str r0, [sp, #24] @ 4-byte Spill
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne r1, #1
; THUMBV7-NEXT:    cmp r3, #0
; THUMBV7-NEXT:    mov r0, lr
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne r2, #1
; THUMBV7-NEXT:    cmp.w lr, #0
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne r0, #1
; THUMBV7-NEXT:    ldr r4, [sp, #28] @ 4-byte Reload
; THUMBV7-NEXT:    ands r0, r2
; THUMBV7-NEXT:    orrs r1, r0
; THUMBV7-NEXT:    adds r5, r5, r4
; THUMBV7-NEXT:    str.w r5, [r11, #4]
; THUMBV7-NEXT:    ldr r0, [sp, #36] @ 4-byte Reload
; THUMBV7-NEXT:    mov.w r5, #0
; THUMBV7-NEXT:    adcs.w r0, r0, r12
; THUMBV7-NEXT:    adc r2, r5, #0
; THUMBV7-NEXT:    cmp r6, #0
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne r6, #1
; THUMBV7-NEXT:    orrs r1, r6
; THUMBV7-NEXT:    ldr r6, [sp, #84]
; THUMBV7-NEXT:    umlal r0, r2, r3, r7
; THUMBV7-NEXT:    ldr r3, [sp, #32] @ 4-byte Reload
; THUMBV7-NEXT:    cmp r7, #0
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne r7, #1
; THUMBV7-NEXT:    orrs r1, r3
; THUMBV7-NEXT:    mov r3, r6
; THUMBV7-NEXT:    cmp r6, #0
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne r3, #1
; THUMBV7-NEXT:    cmp.w r8, #0
; THUMBV7-NEXT:    and.w r3, r3, r7
; THUMBV7-NEXT:    ldr r7, [sp, #80]
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne.w r8, #1
; THUMBV7-NEXT:    cmp.w r9, #0
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne.w r9, #1
; THUMBV7-NEXT:    orrs r7, r6
; THUMBV7-NEXT:    ldr r6, [sp, #96]
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne r7, #1
; THUMBV7-NEXT:    orr.w r3, r3, r8
; THUMBV7-NEXT:    orrs.w r6, r6, lr
; THUMBV7-NEXT:    orr.w r3, r3, r9
; THUMBV7-NEXT:    it ne
; THUMBV7-NEXT:    movne r6, #1
; THUMBV7-NEXT:    adds.w r0, r0, r10
; THUMBV7-NEXT:    str.w r0, [r11, #8]
; THUMBV7-NEXT:    ldr r0, [sp, #24] @ 4-byte Reload
; THUMBV7-NEXT:    adcs r0, r2
; THUMBV7-NEXT:    str.w r0, [r11, #12]
; THUMBV7-NEXT:    ldr r0, [sp, #40] @ 4-byte Reload
; THUMBV7-NEXT:    and.w r2, r7, r6
; THUMBV7-NEXT:    orr.w r0, r0, r3
; THUMBV7-NEXT:    orr.w r0, r0, r2
; THUMBV7-NEXT:    orr.w r0, r0, r1
; THUMBV7-NEXT:    adc r1, r5, #0
; THUMBV7-NEXT:    orrs r0, r1
; THUMBV7-NEXT:    and r0, r0, #1
; THUMBV7-NEXT:    strb.w r0, [r11, #16]
; THUMBV7-NEXT:    add sp, #44
; THUMBV7-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}
start:
  %0 = tail call { i128, i1 } @llvm.umul.with.overflow.i128(i128 %l, i128 %r) #2
  %1 = extractvalue { i128, i1 } %0, 0
  %2 = extractvalue { i128, i1 } %0, 1
  %3 = zext i1 %2 to i8
  %4 = insertvalue { i128, i8 } undef, i128 %1, 0
  %5 = insertvalue { i128, i8 } %4, i8 %3, 1
  ret { i128, i8 } %5
}

; Function Attrs: nounwind readnone speculatable
declare { i128, i1 } @llvm.umul.with.overflow.i128(i128, i128) #1

attributes #0 = { nounwind readnone uwtable }
attributes #1 = { nounwind readnone speculatable }
attributes #2 = { nounwind }