Think In Geek

In geek we trust

Walk-through flang – Part 4

In the last installment we saw how flang splits the input in tokens. Once we have the tokens identified we need to parse them.
Continue reading “Walk-through flang – Part 4” »

Walk-through flang – Part 3

In the last chapter we saw how the driver handles the compilation and how it invokes flang1 and flang2. In this chapter we are going to start with flang1.
Continue reading “Walk-through flang – Part 3” »

Walk-through flang – Part 2

In the previous installment of this series we saw basically how to install flang and we ran a simple smoke test. In this post we will see a high level overview of what happens when we compile a Fortran program using flang. We will also compare it with what usually happens with clang.

Continue reading “Walk-through flang – Part 2” »

Walk-through flang – Part 1

Flang is an open source project to create a Fortran compiler for LLVM. It is based on NVIDIA/PGI Fortran and it has been released under Apache License 2.0. In this series we will do a walk-through the code of this compiler and how it has been integrated in the existing LLVM infrastructure.

Continue reading “Walk-through flang – Part 1” »

10 years of Think In Geek

10 years ago Bernat (brafales) started this blog. This is still his blog though he is a bit busy these days and he cannot publish as much as he wants.

All in all, without his initiative this blog would not exist. As would not exist many of the posts I published here since 2012, when Bernat insisted that I should collaborate. I guess his persistence has somehow paid off 🙂

Consider this post a very small celebration of those 10 years. Hopefully we will be able to celebrate many more years.

Compilers as a memory error detectors

This is a small anecdote of something that happened me the other day.
Continue reading “Compilers as a memory error detectors” »

Exploring AArch64 assembler – Chapter 8

In the last chapter we saw how to call a function. We mentioned a special memory called the stack but we did not delve into it. Let’s see in this chapter how we can use the stack and why it is important in function calls.

Continue reading “Exploring AArch64 assembler – Chapter 8” »

A small Telegram Bot in Go

I started using Telegram a few years ago. Most of the time I don’t use it much to have 1 to 1 conversations but rather chat in a small group of friends which I’ve known for a while now. Every now and then, we share some links to Twitter on that group, and unfortunately the Telegram official clients preview mode don’t support previewing Twitter messages with more than one image.

Take this test message as an example:

The moment I link this to a Telegram chat, this is the result:

Which is not ideal, as sometimes the message doesn’t make much sense when only one of the images is displayed.

Turns out I’ve been learning some Go over the last few months as well, so I wondered if I could write a small Telegram Bot to help me with that. I needed something to which I could send a Twitter link, and gave me back either the default Twitter preview in Telegram, or a custom made one with all the images of the message, in case there were more than one.
Continue reading “A small Telegram Bot in Go” »

ARM assembler in Raspberry Pi – Chapter 27

We saw in the previous chapter what is the process required to build a program from different compilation units. This process happened before we obtained the final program. The question is, can this process happen when the program runs? This is, is it possible to dynamically link a program?

Continue reading “ARM assembler in Raspberry Pi – Chapter 27” »

Whose is this optimization?

Today we will toy around a very simple optimization in clang and discuss a bit about separation of concerns when optimizing code.

Continue reading “Whose is this optimization?” »

Previous Posts